From 4668c142dce77c6f29fb75532c1acfa1b2d322ff Mon Sep 17 00:00:00 2001 From: Anssi Kääriäinen Date: Wed, 7 Aug 2013 09:51:32 +0300 Subject: Made Model.__eq__ consider proxy models equivalent Fixed #11892, fixed #16458, fixed #14492. --- docs/ref/models/instances.txt | 34 ++++++++++++++++++++++++++++++++++ docs/releases/1.7.txt | 5 +++++ 2 files changed, 39 insertions(+) (limited to 'docs') diff --git a/docs/ref/models/instances.txt b/docs/ref/models/instances.txt index cb8570afdc..94b1face81 100644 --- a/docs/ref/models/instances.txt +++ b/docs/ref/models/instances.txt @@ -494,6 +494,40 @@ using ``__str__()`` like this:: # first_name and last_name will be unicode strings. return force_bytes('%s %s' % (self.first_name, self.last_name)) +``__eq__`` +---------- + +.. method:: Model.__eq__() + +The equality method is defined such that instances with the same primary +key value and the same concrete class are considered equal. The term +concrete class means proxy model's first non-proxy parent or the class +itself if it isn't a proxy class. + +For example:: + + form django.db import models + + class MyModel(models.Model): + id = models.AutoField(primary_key=True) + + class MyProxyModel(MyModel): + class Meta: + proxy = True + + class MultitableInherited(MyModel): + pass + + MyModel(id=1) == MyModel(id=1) + MyModel(id=1) == MyProxyModel(id=1) + MyModel(id=1) != MultitableInherited(id=1) + MyModel(id=1) != MyModel(id=2) + +.. versionchanged:: 1.7 + + In previous versions only instances of the exact same class and same + primary key value were considered equal. + ``get_absolute_url`` -------------------- diff --git a/docs/releases/1.7.txt b/docs/releases/1.7.txt index 7a46b3facb..774d9d3161 100644 --- a/docs/releases/1.7.txt +++ b/docs/releases/1.7.txt @@ -194,6 +194,11 @@ Miscellaneous removes the ability for visitors to generate spurious HTTP 500 errors by requesting static files that don't exist or haven't been collected yet. +* The :meth:`django.db.models.Model.__eq__` method is now defined in a + way where instances of a proxy model and its base model are considered + equal when primary keys match. Previously only instances of exact same + class were considered equal on primary key match. + Features deprecated in 1.7 ========================== -- cgit v1.3