在django中使用对象作为字典的键是否合理?我这样做了,它的确有效。但我想知道这是不是最佳做法,或者是否会造成我现在还没有预见到的困难。
我正在研究一个处理教育标准的项目。我的字典的结构与{Subject:[Standards]}
一致。主题的模型看起来像:
class Subject(models.Model):
subject = models.CharField(max_length=255, unique=True)
def __unicode__(self):
return self.subject
可以使用此模型中的对象作为我的词典的键,还是应该使用字符串表示,例如Subject.subject?
如果是这样,unicode方法会影响这个吗?当我尝试使用Subject.subject作为键时,我得到了{u'Math': [<Subject: Students can perform calculations.>]}
使用对象作为键的内容,它看起来像{<Subject: Math>: [<Standard: Students can perform calculations.>]}
这是我昨天问过的关于using None as a dictionary key的问题的后续内容。
答案 0 :(得分:10)
可变对象不应该真正用作字典键。也就是说,这是有效的,因为基础模型类根据模型的主键定义__hash__
,这不太可能改变。但我更愿意直接使用pk作为关键。
答案 1 :(得分:3)
这取决于您想要如何使用它们。我建议采用一种更简单的方法:
字典的键可以是Model的主键。
答案 2 :(得分:-1)
假设对象实现了一个好的哈希函数,我会说使用对象作为键是没有错的,但这只是我个人的看法。
答案 3 :(得分:-1)
最好使用字符串表示,因为当你需要进行查找时,你需要写出所有这些东西,这将是一个痛苦,另外如果将来你想改变你的unicode表示你将不得不找到一种方法来重写旧的unicode做仰视。
古德勒克。