2012-11-14 154 views
5

Django模型實例Hashable?例如,我可以使用Django Model實例作爲字典鍵,還是創建一組獨特的模型?Django模型實例Hashable?

如果它們是Hashable,是什麼導致兩個Django Model實例被視爲相同?它是否天真地實現了Hashable,如果它們在內存中是相同的Python對象,或者它以某種方式使用Model實例的值,那麼它只會認爲它們是相同的?

+3

你試過嗎?你發現了什麼?此外,*爲什麼*你想讓他們成爲,你想達到什麼目的? –

+5

相關/重複http://stackoverflow.com/questions/7042530/django-is-it-reasonable-to-use-objects-as-dictionary-keys –

+0

我需要密鑰本身作爲一個對象在同一個地方我需要字典的價值,它的工作原理令人驚訝。另外,正如@VajkHermecz所說,這是一個重複的問題,更多的細節在那裏。 – pablete

回答

9

模型實例是Hashable。如果它們是相同類型的模型並且具有相同的主鍵,則它們被認爲是相同的。你可以看到這個defined in 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()