Django:使用对象作为字典键合理吗?
在Django中使用对象作为字典的键合理吗?我试过这样做,确实可以工作。但我在想,这样做是否是最佳实践,或者将来会不会遇到我现在想不到的问题。
我正在做一个与教育标准相关的项目。我有一些字典,结构大致是 {科目:[标准]}
。科目的模型看起来像这样:
class Subject(models.Model):
subject = models.CharField(max_length=255, unique=True)
def __unicode__(self):
return self.subject
我可以用这个模型中的对象作为字典的键吗?还是说我应该用字符串表示,比如Subject.subject呢?
如果可以的话,unicode方法会影响这个吗?我尝试用Subject.subject作为键时,得到的结果是 {u'数学': [<科目: 学生可以进行计算.>]}
。而使用对象作为键时,结果看起来是 {<科目: 数学>: [<标准: 学生可以进行计算.>]}
。
这是我昨天问的一个问题的后续,关于 使用None作为字典键。
4 个回答
-1
假设这些对象有一个好的哈希函数,我认为用对象作为键没有什么问题,不过这只是我个人的看法。
3
这要看你想怎么使用它们。不过我建议一个更简单的方法:
字典的键可以是模型的主键。
14
可变对象不应该作为字典的键。虽然这样做是可行的,因为基础模型类是通过模型的主键来定义__hash__
的,而主键一般不会改变。但我更倾向于直接使用主键作为键。