diff --git a/django/db/models/base.py b/django/db/models/base.py index 5aa3158fee..4f034bcf8b 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -135,6 +135,9 @@ class Model(object): def __ne__(self, other): return not self.__eq__(other) + def __hash__(self): + return hash(self._get_pk_val()) + def __init__(self, *args, **kwargs): dispatcher.send(signal=signals.pre_init, sender=self.__class__, args=args, kwargs=kwargs) diff --git a/tests/modeltests/basic/models.py b/tests/modeltests/basic/models.py index 2f4b932fe0..557331a36e 100644 --- a/tests/modeltests/basic/models.py +++ b/tests/modeltests/basic/models.py @@ -5,6 +5,11 @@ This is a basic model with only two non-primary-key fields. """ +try: + set +except NameError: + from sets import Set as set + from django.db import models class Article(models.Model): @@ -389,4 +394,10 @@ year, including Jan. 1 and Dec. 31. >>> a.save() >>> Article.objects.get(pk=a.id).headline u'\u6797\u539f \u3081\u3050\u307f' + +# Model instances have a hash function, so they can be used in sets or as +# dictionary keys. Two models compare as equal if their primary keys are equal. +>>> s = set([a10, a11, a12]) +>>> Article.objects.get(headline='Article 11') in s +True """