我最近注意到我的一堆peewee模型对象引用相同的数据并没有被识别为等效,即使它们包含相同的数据。
在这些人身上覆盖__hash__是否安全?它出现可以工作但是我不会想要回来并在将来意外地咬我 - 这样做会像内部状态那样记录我的映射应该担心吗?
class User(PowertailMeta):
name = CharField(unique=True)
password = CharField(null=False)
balance = FloatField(default=10.0)
cap = FloatField(default=60, constraints=[Check('cap >= 0')])
is_admin = BooleanField(default=False)
last_login = DateTimeField(default=datetime.now)
picture = CharField(default="porp")
def __hash__(self):
return hash(self.name) # since name is unique...
这通过了琐碎的测试,但我不确定我可能需要寻找什么。
答案 0 :(得分:1)
Visual Studio Professional
最近已添加到__hash__
,请参阅https://github.com/coleifer/peewee/issues/879。它尚未发布,但我认为它将在2.8.1中。
实施相当简单:
peewee.Model
因此,它依赖于模型类和主键。如果您有其他需求,我不会在覆盖它时遇到任何问题。但是,根据您建议的解决方案,请考虑以下事项:
def __hash__(self):
return hash((self.__class__, self._get_pk_value()))
这是两个不同的模型,即使使用不同的字段,但它们会产生相同的哈希值。