djangoモデルオブジェクトに問題があり、__hash__
それらを使用するときに適用したい、わずかに複雑な一意性/識別性の制約を()でオーバーライドしました。これは、メモリ内で直接インスタンス化したばかりのオブジェクトでは正常に機能しますが、データベースから取得したオブジェクトでは機能しません。
このような:
class Animal(models.Model):
name = model.Charfield('name', max_length=10)
def__hash__(self):
return len(self.name) # silly example for purposes of illustration
そしてこれ:
>> a = models.Animal(name='cat')
>> b = models.Animal(name='dog')
>> len(set((a,b))
> 1
>> a.save()
>> b.save()
>> len(set(models.Animal.objects.all()))
> 2
うーん。ここで使用されているハッシュ関数が何であれ、それは私のものではありません。遅延フェッチ/オブジェクトがまだ完全にインスタンス化されていない状態に関連していると思いますが、それを回避するにはどうすればよいですか?