2012-11-14 30 views
5

Các phiên bản Mô hình Django có thể Hashable không? Ví dụ: tôi có thể sử dụng phiên bản Mô hình Django làm khóa từ điển hay tạo Tập hợp các kiểu duy nhất không?Các phiên bản Mô hình Django có thể Hashable không?

Nếu chúng là Hashable, điều gì khiến hai phiên bản Mô hình Django được xem là giống nhau? Liệu nó có thực thi Hashable một cách ngây thơ như vậy mà nó chỉ xem xét chúng là giống nhau nếu chúng là cùng một đối tượng Python trong bộ nhớ, hay nó sử dụng giá trị của cá thể Model theo một cách nào đó?

+3

Bạn đã cố gắng thực hiện điều đó chưa? Bạn đã tìm thấy gì? Hơn nữa, * tại sao * bạn muốn họ trở thành, bạn đang cố gắng đạt được điều gì? –

+5

liên quan/trùng lặp của http://stackoverflow.com/questions/7042530/django-is-it-reasonable-to-use-objects-as-dictionary-keys –

+0

Tôi cần chính khóa đó làm đối tượng ở cùng một vị trí i cần giá trị của dict, nó hoạt động, đáng ngạc nhiên. Ngoài ra, như @VajkHermecz đã nói, đó là một câu hỏi trùng lặp, chi tiết hơn ở đó. – pablete

Trả lời

9

Các phiên bản mẫu có thể Hashable. Chúng được coi là giống nhau nếu chúng là Mô hình cùng loại và có cùng khóa chính. Bạn có thể thấy điều này 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() 
Các vấn đề liên quan