From 343fa35a2cd4bb22457eb9031fa23c751c13f09d Mon Sep 17 00:00:00 2001 From: Malcolm Tredinnick Date: Tue, 19 Feb 2008 01:59:34 +0000 Subject: [PATCH] Fixed #2936, #6500 -- Added a __hash__() method to Models (since we implement our own __eq__ method). git-svn-id: http://code.djangoproject.com/svn/django/trunk@7132 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/db/models/base.py | 3 +++ tests/modeltests/basic/models.py | 11 +++++++++++ 2 files changed, 14 insertions(+) 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 """