27

Djangoモデルのインスタンスはハッシュ可能ですか? たとえば、Django モデル インスタンスを辞書キーとして使用したり、一意のモデルのセットを作成したりできますか?

それらが Hashable である場合、2 つの Django Model インスタンスが同じと見なされる原因は何ですか? Hashable を素朴に実装して、メモリ内の同じ Python オブジェクトである場合にのみ同じと見なすようにしますか、それとも Model インスタンスの値を何らかの方法で使用しますか?

4

1 に答える 1

33

モデル インスタンスは Hashable です。同じタイプのモデルで、同じ主キーを持つ場合、それらは同じであると見なされます。これは で定義されてdjango.db.models.baseいることがわかります:

class Model(object):

    ...

    def __hash__(self):
        return hash(self._get_pk_val())

    ...

    def __eq__(self, other):
        return isinstance(other, self.__class__) and \
               self._get_pk_val() == other._get_pk_val()
于 2012-11-14T15:14:37.593 に答える