From 27d352800c268856c7d69966bdfbdf6dc7a39da6 Mon Sep 17 00:00:00 2001 From: Adam Chainz Date: Fri, 7 Oct 2016 10:40:16 +0100 Subject: [PATCH] [1.10.x] Doc'd that model instances with pk=None don't compare equal. Backport of 224fe22bf1628c1feff110ce993dcb33880bf3a3 from master --- docs/ref/models/instances.txt | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/docs/ref/models/instances.txt b/docs/ref/models/instances.txt index 49f7184279..e799d0078c 100644 --- a/docs/ref/models/instances.txt +++ b/docs/ref/models/instances.txt @@ -646,9 +646,10 @@ with :func:`~django.utils.encoding.python_2_unicode_compatible` as shown above. .. 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. For proxy -models, concrete class is defined as the model's first non-proxy parent; -for all other models it is simply the model's class. +key value and the same concrete class are considered equal, except that +instances with a primary key value of ``None`` aren't equal to anything except +themselves. For proxy models, concrete class is defined as the model's first +non-proxy parent; for all other models it's simply the model's class. For example:: @@ -664,10 +665,18 @@ For example:: class MultitableInherited(MyModel): pass + # Primary keys compared MyModel(id=1) == MyModel(id=1) - MyModel(id=1) == MyProxyModel(id=1) - MyModel(id=1) != MultitableInherited(id=1) MyModel(id=1) != MyModel(id=2) + # Primay keys are None + MyModel(id=None) != MyModel(id=None) + # Same instance + instance = MyModel(id=None) + instance == instance + # Proxy model + MyModel(id=1) == MyProxyModel(id=1) + # Multi-table inheritance + MyModel(id=1) != MultitableInherited(id=1) ``__hash__()`` --------------