Fixed #27953 -- Added instance's pk to Model.__str__().

This commit is contained in:
Collin Anderson 2017-04-08 14:38:48 -04:00 committed by Tim Graham
parent 7c9cb1ed37
commit 1a49b89470
4 changed files with 13 additions and 7 deletions

View File

@ -505,7 +505,7 @@ class Model(metaclass=ModelBase):
return '<%s: %s>' % (self.__class__.__name__, u) return '<%s: %s>' % (self.__class__.__name__, u)
def __str__(self): def __str__(self):
return '%s object' % self.__class__.__name__ return '%s object (%s)' % (self.__class__.__name__, self.pk)
def __eq__(self, other): def __eq__(self, other):
if not isinstance(other, Model): if not isinstance(other, Model):

View File

@ -437,11 +437,11 @@ Once you're in the shell, explore the :doc:`database API </topics/db/queries>`::
# objects.all() displays all the questions in the database. # objects.all() displays all the questions in the database.
>>> Question.objects.all() >>> Question.objects.all()
<QuerySet [<Question: Question object>]> <QuerySet [<Question: Question object (1)>]>
Wait a minute. ``<Question: Question object>`` is, utterly, an unhelpful representation Wait a minute. ``<Question: Question object (1)>`` isn't a helpful
of this object. Let's fix that by editing the ``Question`` model (in the representation of this object. Let's fix that by editing the ``Question`` model
``polls/models.py`` file) and adding a (in the ``polls/models.py`` file) and adding a
:meth:`~django.db.models.Model.__str__` method to both ``Question`` and :meth:`~django.db.models.Model.__str__` method to both ``Question`` and
``Choice``: ``Choice``:

View File

@ -441,6 +441,9 @@ Miscellaneous
:class:`~django.views.i18n.JavaScriptCatalog` view now raises ``ValueError`` :class:`~django.views.i18n.JavaScriptCatalog` view now raises ``ValueError``
instead of passing silently. instead of passing silently.
* A model instance's primary key now appears in the default ``Model.__str__()``
method, e.g. ``Question object (1)``.
.. _deprecated-features-2.0: .. _deprecated-features-2.0:
Features deprecated in 2.0 Features deprecated in 2.0

View File

@ -30,5 +30,8 @@ class SimpleTests(TestCase):
# coerce the returned value. # coerce the returned value.
self.assertIsInstance(obj.__str__(), str) self.assertIsInstance(obj.__str__(), str)
self.assertIsInstance(obj.__repr__(), str) self.assertIsInstance(obj.__repr__(), str)
self.assertEqual(str(obj), 'Default object') self.assertEqual(str(obj), 'Default object (None)')
self.assertEqual(repr(obj), '<Default: Default object>') self.assertEqual(repr(obj), '<Default: Default object (None)>')
obj2 = Default(pk=100)
self.assertEqual(str(obj2), 'Default object (100)')
self.assertEqual(repr(obj2), '<Default: Default object (100)>')