1
0
mirror of https://github.com/django/django.git synced 2025-07-04 09:49:12 +00:00

unicode: Changed all tests and documentation to use __unicode__ instead of

__str__ in places where it's appropriate to do so.


git-svn-id: http://code.djangoproject.com/svn/django/branches/unicode@5386 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Malcolm Tredinnick 2007-05-31 04:25:40 +00:00
parent ddae2ecfe4
commit 8d1ce1fd33
46 changed files with 181 additions and 134 deletions

View File

@ -15,14 +15,14 @@ a weblog application::
name = models.CharField(maxlength=100) name = models.CharField(maxlength=100)
tagline = models.TextField() tagline = models.TextField()
def __str__(self): def __unicode__(self):
return self.name return self.name
class Author(models.Model): class Author(models.Model):
name = models.CharField(maxlength=50) name = models.CharField(maxlength=50)
email = models.URLField() email = models.URLField()
def __str__(self): def __unicode__(self):
return self.name return self.name
class Entry(models.Model): class Entry(models.Model):
@ -32,7 +32,7 @@ a weblog application::
pub_date = models.DateTimeField() pub_date = models.DateTimeField()
authors = models.ManyToManyField(Author) authors = models.ManyToManyField(Author)
def __str__(self): def __unicode__(self):
return self.headline return self.headline
Creating objects Creating objects

View File

@ -47,7 +47,7 @@ this document, we'll be working with the following model, a "place" object::
class Admin: class Admin:
pass pass
def __str__(self): def __unicode__(self):
return self.name return self.name
Defining the above class is enough to create an admin interface to a ``Place``, Defining the above class is enough to create an admin interface to a ``Place``,

View File

@ -1339,10 +1339,11 @@ A few special cases to note about ``list_display``:
born_in_fifties.boolean = True born_in_fifties.boolean = True
* The ``__str__()`` method is just as valid in ``list_display`` as any * The ``__str__()`` and ``__unicode__()`` methods are just as valid in
other model method, so it's perfectly OK to do this:: ``list_display`` as any other model method, so it's perfectly OK to do
this::
list_display = ('__str__', 'some_other_field') list_display = ('__unicode__', 'some_other_field')
* Usually, elements of ``list_display`` that aren't actual database fields * Usually, elements of ``list_display`` that aren't actual database fields
can't be used in sorting (because Django does all the sorting at the can't be used in sorting (because Django does all the sorting at the
@ -1748,11 +1749,13 @@ A few object methods have special meaning:
----------- -----------
``__str__()`` is a Python "magic method" that defines what should be returned ``__str__()`` is a Python "magic method" that defines what should be returned
if you call ``str()`` on the object. Django uses ``str(obj)`` in a number of if you call ``str()`` on the object. Django uses ``str(obj)`` (or the related
places, most notably as the value displayed to render an object in the Django function, ``unicode(obj)`` -- see below) in a number of places, most notably
admin site and as the value inserted into a template when it displays an as the value displayed to render an object in the Django admin site and as the
object. Thus, you should always return a nice, human-readable string for the value inserted into a template when it displays an object. Thus, you should
object's ``__str__``. Although this isn't required, it's strongly encouraged. always return a nice, human-readable string for the object's ``__str__``.
Although this isn't required, it's strongly encouraged (see the description of
``__unicode__``, below, before putting ``_str__`` methods everywhere).
For example:: For example::
@ -1761,7 +1764,32 @@ For example::
last_name = models.CharField(maxlength=50) last_name = models.CharField(maxlength=50)
def __str__(self): def __str__(self):
return '%s %s' % (self.first_name, self.last_name) # Note use of django.utils.encoding.smart_str() here because
# first_name and last_name will be unicode strings.
return smart_str('%s %s' % (self.first_name, self.last_name))
``__unicode__``
---------------
The ``__unicode__()`` method is called whenever you call ``unicode()`` on an
object. Since Django's database backends will return Unicode strings in your
model's attributes, you would normally want to write a ``__unicode__()``
method for your model. The example in the previous section could be written
more simply as::
class Person(models.Model):
first_name = models.CharField(maxlength=50)
last_name = models.CharField(maxlength=50)
def __unicode__(self):
return u'%s %s' % (self.first_name, self.last_name)
If you define a ``__unicode__()`` method on your model and not a ``__str__()``
method, Django will automatically provide you with a ``__str__()`` that calls
``__unicode()__`` and then converts the result correctly to a UTF-8 encoded
string object. This is recommended development practice: define only
``__unicode__()`` and let Django take care of the conversion to string objects
when required.
``get_absolute_url`` ``get_absolute_url``
-------------------- --------------------

View File

@ -1333,7 +1333,7 @@ Consider this set of models::
title = models.CharField(maxlength=3, choices=TITLE_CHOICES) title = models.CharField(maxlength=3, choices=TITLE_CHOICES)
birth_date = models.DateField(blank=True, null=True) birth_date = models.DateField(blank=True, null=True)
def __str__(self): def __unicode__(self):
return self.name return self.name
class Book(models.Model): class Book(models.Model):

View File

@ -27,7 +27,7 @@ quick example::
class Reporter(models.Model): class Reporter(models.Model):
full_name = models.CharField(maxlength=70) full_name = models.CharField(maxlength=70)
def __str__(self): def __unicode__(self):
return self.full_name return self.full_name
class Article(models.Model): class Article(models.Model):
@ -36,7 +36,7 @@ quick example::
article = models.TextField() article = models.TextField()
reporter = models.ForeignKey(Reporter) reporter = models.ForeignKey(Reporter)
def __str__(self): def __unicode__(self):
return self.headline return self.headline
Install it Install it

View File

@ -474,22 +474,38 @@ Once you're in the shell, explore the database API::
Wait a minute. ``<Poll: Poll object>`` is, utterly, an unhelpful Wait a minute. ``<Poll: Poll object>`` is, utterly, an unhelpful
representation of this object. Let's fix that by editing the polls model (in representation of this object. Let's fix that by editing the polls model (in
the ``polls/models.py`` file) and adding a ``__str__()`` method to both the ``polls/models.py`` file) and adding a ``__unicode__()`` method to both
``Poll`` and ``Choice``:: ``Poll`` and ``Choice``::
class Poll(models.Model): class Poll(models.Model):
# ... # ...
def __str__(self): def __unicode__(self):
return self.question return self.question
class Choice(models.Model): class Choice(models.Model):
# ... # ...
def __str__(self): def __unicode__(self):
return self.choice return self.choice
It's important to add ``__str__()`` methods to your models, not only for your It's important to add ``__unicode__()`` methods to your models, not only for
own sanity when dealing with the interactive prompt, but also because objects' your own sanity when dealing with the interactive prompt, but also because
representations are used throughout Django's automatically-generated admin. objects' representations are used throughout Django's automatically-generated
admin.
.. admonition:: Why ``__unicode__`` and not ``__str__``?
If you are wondering why we add a ``__unicode__()`` method, rather than a
simple ``__str__()`` method, it is because Django models will contain
unicode strings by default. The values returned from the database, for
example, are all unicode strings. In most cases, your code should be
prepared to handle non-ASCII characters and this is a litle fiddly in
``__str__()`` methods, since you have to worry about which encoding to
use, amongst other things. If you create a ``__unicode__()`` method,
Django will provide a ``__str__()`` method that calls your
``__unicode__()`` and then converts the result to UTF-8 strings when
required. So ``unicode(p)`` will return a unicode string and ``str(p)``
will return a normal string, with the characters encoded as UTF-8 when
necessary..
Note these are normal Python methods. Let's add a custom method, just for Note these are normal Python methods. Let's add a custom method, just for
demonstration:: demonstration::
@ -509,7 +525,7 @@ Let's jump back into the Python interactive shell by running
>>> from mysite.polls.models import Poll, Choice >>> from mysite.polls.models import Poll, Choice
# Make sure our __str__() addition worked. # Make sure our __unicode__() addition worked.
>>> Poll.objects.all() >>> Poll.objects.all()
[<Poll: What's up?>] [<Poll: What's up?>]

View File

@ -14,7 +14,7 @@ class Article(models.Model):
class Meta: class Meta:
ordering = ('pub_date','headline') ordering = ('pub_date','headline')
def __str__(self): def __unicode__(self):
return self.headline return self.headline
__test__ = {'API_TESTS': """ __test__ = {'API_TESTS': """

View File

@ -20,7 +20,7 @@ class Person(models.Model):
name = models.CharField(maxlength=20) name = models.CharField(maxlength=20)
gender = models.CharField(maxlength=1, choices=GENDER_CHOICES) gender = models.CharField(maxlength=1, choices=GENDER_CHOICES)
def __str__(self): def __unicode__(self):
return self.name return self.name
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""

View File

@ -21,8 +21,8 @@ class Author(models.Model):
first_name = models.CharField(maxlength=30, db_column='firstname') first_name = models.CharField(maxlength=30, db_column='firstname')
last_name = models.CharField(maxlength=30, db_column='last') last_name = models.CharField(maxlength=30, db_column='last')
def __str__(self): def __unicode__(self):
return '%s %s' % (self.first_name, self.last_name) return u'%s %s' % (self.first_name, self.last_name)
class Meta: class Meta:
db_table = 'my_author_table' db_table = 'my_author_table'
@ -32,7 +32,7 @@ class Article(models.Model):
headline = models.CharField(maxlength=100) headline = models.CharField(maxlength=100)
authors = models.ManyToManyField(Author, db_table='my_m2m_table') authors = models.ManyToManyField(Author, db_table='my_m2m_table')
def __str__(self): def __unicode__(self):
return self.headline return self.headline
class Meta: class Meta:

View File

@ -23,8 +23,8 @@ class Person(models.Model):
fun = models.BooleanField() fun = models.BooleanField()
objects = PersonManager() objects = PersonManager()
def __str__(self): def __unicode__(self):
return "%s %s" % (self.first_name, self.last_name) return u"%s %s" % (self.first_name, self.last_name)
# An example of a custom manager that sets get_query_set(). # An example of a custom manager that sets get_query_set().
@ -39,7 +39,7 @@ class Book(models.Model):
published_objects = PublishedBookManager() published_objects = PublishedBookManager()
authors = models.ManyToManyField(Person, related_name='books') authors = models.ManyToManyField(Person, related_name='books')
def __str__(self): def __unicode__(self):
return self.title return self.title
# An example of providing multiple custom managers. # An example of providing multiple custom managers.
@ -55,7 +55,7 @@ class Car(models.Model):
cars = models.Manager() cars = models.Manager()
fast_cars = FastCarManager() fast_cars = FastCarManager()
def __str__(self): def __unicode__(self):
return self.name return self.name
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""

View File

@ -11,7 +11,7 @@ class Article(models.Model):
headline = models.CharField(maxlength=100) headline = models.CharField(maxlength=100)
pub_date = models.DateField() pub_date = models.DateField()
def __str__(self): def __unicode__(self):
return self.headline return self.headline
def was_published_today(self): def was_published_today(self):

View File

@ -15,8 +15,8 @@ class Employee(models.Model):
class Meta: class Meta:
ordering = ('last_name', 'first_name') ordering = ('last_name', 'first_name')
def __str__(self): def __unicode__(self):
return "%s %s" % (self.first_name, self.last_name) return u"%s %s" % (self.first_name, self.last_name)
class Business(models.Model): class Business(models.Model):
name = models.CharField(maxlength=20, primary_key=True) name = models.CharField(maxlength=20, primary_key=True)
@ -24,7 +24,7 @@ class Business(models.Model):
class Meta: class Meta:
verbose_name_plural = 'businesses' verbose_name_plural = 'businesses'
def __str__(self): def __unicode__(self):
return self.name return self.name
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""

View File

@ -16,7 +16,7 @@ class Article(models.Model):
headline = models.CharField(maxlength=100, default='Default headline') headline = models.CharField(maxlength=100, default='Default headline')
pub_date = models.DateTimeField(default=datetime.now) pub_date = models.DateTimeField(default=datetime.now)
def __str__(self): def __unicode__(self):
return self.headline return self.headline
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""

View File

@ -14,7 +14,7 @@ class Article(models.Model):
headline = models.CharField(maxlength=100, default='Default headline') headline = models.CharField(maxlength=100, default='Default headline')
pub_date = models.DateTimeField() pub_date = models.DateTimeField()
def __str__(self): def __unicode__(self):
return self.headline return self.headline
class Meta: class Meta:

View File

@ -24,7 +24,7 @@ class TaggedItem(models.Model):
class Meta: class Meta:
ordering = ["tag"] ordering = ["tag"]
def __str__(self): def __unicode__(self):
return self.tag return self.tag
class Animal(models.Model): class Animal(models.Model):
@ -33,7 +33,7 @@ class Animal(models.Model):
tags = generic.GenericRelation(TaggedItem) tags = generic.GenericRelation(TaggedItem)
def __str__(self): def __unicode__(self):
return self.common_name return self.common_name
class Vegetable(models.Model): class Vegetable(models.Model):
@ -42,7 +42,7 @@ class Vegetable(models.Model):
tags = generic.GenericRelation(TaggedItem) tags = generic.GenericRelation(TaggedItem)
def __str__(self): def __unicode__(self):
return self.name return self.name
class Mineral(models.Model): class Mineral(models.Model):
@ -51,7 +51,7 @@ class Mineral(models.Model):
# note the lack of an explicit GenericRelation here... # note the lack of an explicit GenericRelation here...
def __str__(self): def __unicode__(self):
return self.name return self.name
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""

View File

@ -17,7 +17,7 @@ class Article(models.Model):
class Meta: class Meta:
get_latest_by = 'pub_date' get_latest_by = 'pub_date'
def __str__(self): def __unicode__(self):
return self.headline return self.headline
class Person(models.Model): class Person(models.Model):
@ -26,7 +26,7 @@ class Person(models.Model):
# Note that this model doesn't have "get_latest_by" set. # Note that this model doesn't have "get_latest_by" set.
def __str__(self): def __unicode__(self):
return self.name return self.name
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""

View File

@ -17,7 +17,7 @@ from django.shortcuts import get_object_or_404, get_list_or_404
class Author(models.Model): class Author(models.Model):
name = models.CharField(maxlength=50) name = models.CharField(maxlength=50)
def __str__(self): def __unicode__(self):
return self.name return self.name
class ArticleManager(models.Manager): class ArticleManager(models.Manager):
@ -30,7 +30,7 @@ class Article(models.Model):
objects = models.Manager() objects = models.Manager()
by_a_sir = ArticleManager() by_a_sir = ArticleManager()
def __str__(self): def __unicode__(self):
return self.title return self.title
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""

View File

@ -12,8 +12,8 @@ class Person(models.Model):
last_name = models.CharField(maxlength=100) last_name = models.CharField(maxlength=100)
birthday = models.DateField() birthday = models.DateField()
def __str__(self): def __unicode__(self):
return '%s %s' % (self.first_name, self.last_name) return u'%s %s' % (self.first_name, self.last_name)
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""
# Acting as a divine being, create an Person. # Acting as a divine being, create an Person.

View File

@ -12,7 +12,7 @@ class Article(models.Model):
class Meta: class Meta:
ordering = ('-pub_date', 'headline') ordering = ('-pub_date', 'headline')
def __str__(self): def __unicode__(self):
return self.headline return self.headline
__test__ = {'API_TESTS':r""" __test__ = {'API_TESTS':r"""

View File

@ -14,8 +14,8 @@ class Issue(models.Model):
cc = models.ManyToManyField(User, blank=True, related_name='test_issue_cc') cc = models.ManyToManyField(User, blank=True, related_name='test_issue_cc')
client = models.ForeignKey(User, related_name='test_issue_client') client = models.ForeignKey(User, related_name='test_issue_client')
def __str__(self): def __unicode__(self):
return str(self.num) return unicode(self.num)
class Meta: class Meta:
ordering = ('num',) ordering = ('num',)

View File

@ -16,14 +16,14 @@ class Reporter(models.Model):
first_name = models.CharField(maxlength=30) first_name = models.CharField(maxlength=30)
last_name = models.CharField(maxlength=30) last_name = models.CharField(maxlength=30)
def __str__(self): def __unicode__(self):
return "%s %s" % (self.first_name, self.last_name) return u"%s %s" % (self.first_name, self.last_name)
class Article(models.Model): class Article(models.Model):
headline = models.CharField(maxlength=100) headline = models.CharField(maxlength=100)
pub_date = models.DateField() pub_date = models.DateField()
def __str__(self): def __unicode__(self):
return self.headline return self.headline
class Writer(models.Model): class Writer(models.Model):
@ -31,8 +31,8 @@ class Writer(models.Model):
article = models.ForeignKey(Article) article = models.ForeignKey(Article)
position = models.CharField(maxlength=100) position = models.CharField(maxlength=100)
def __str__(self): def __unicode__(self):
return '%s (%s)' % (self.reporter, self.position) return u'%s (%s)' % (self.reporter, self.position)
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""
# Create a few Reporters. # Create a few Reporters.

View File

@ -14,7 +14,7 @@ class Category(models.Model):
class Meta: class Meta:
ordering = ('name',) ordering = ('name',)
def __str__(self): def __unicode__(self):
return self.name return self.name
class Article(models.Model): class Article(models.Model):
@ -25,7 +25,7 @@ class Article(models.Model):
class Meta: class Meta:
ordering = ('pub_date',) ordering = ('pub_date',)
def __str__(self): def __unicode__(self):
return self.headline return self.headline
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""

View File

@ -19,7 +19,7 @@ class Person(models.Model):
friends = models.ManyToManyField('self') friends = models.ManyToManyField('self')
idols = models.ManyToManyField('self', symmetrical=False, related_name='stalkers') idols = models.ManyToManyField('self', symmetrical=False, related_name='stalkers')
def __str__(self): def __unicode__(self):
return self.name return self.name
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""

View File

@ -16,7 +16,7 @@ class Category(models.Model):
name = models.CharField(maxlength=20) name = models.CharField(maxlength=20)
parent = models.ForeignKey('self', null=True, related_name='child_set') parent = models.ForeignKey('self', null=True, related_name='child_set')
def __str__(self): def __unicode__(self):
return self.name return self.name
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""

View File

@ -14,7 +14,7 @@ class Person(models.Model):
mother = models.ForeignKey('self', null=True, related_name='mothers_child_set') mother = models.ForeignKey('self', null=True, related_name='mothers_child_set')
father = models.ForeignKey('self', null=True, related_name='fathers_child_set') father = models.ForeignKey('self', null=True, related_name='fathers_child_set')
def __str__(self): def __unicode__(self):
return self.full_name return self.full_name
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""

View File

@ -10,15 +10,15 @@ class Musician(models.Model):
first_name = models.CharField(maxlength=30) first_name = models.CharField(maxlength=30)
last_name = models.CharField(maxlength=30) last_name = models.CharField(maxlength=30)
def __str__(self): def __unicode__(self):
return "%s %s" % (self.first_name, self.last_name) return u"%s %s" % (self.first_name, self.last_name)
class Album(models.Model): class Album(models.Model):
name = models.CharField(maxlength=100) name = models.CharField(maxlength=100)
musician = models.ForeignKey(Musician) musician = models.ForeignKey(Musician)
release_date = models.DateField(blank=True, null=True) release_date = models.DateField(blank=True, null=True)
def __str__(self): def __unicode__(self):
return self.name return self.name
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""

View File

@ -12,7 +12,7 @@ from django.db import models
class Publication(models.Model): class Publication(models.Model):
title = models.CharField(maxlength=30) title = models.CharField(maxlength=30)
def __str__(self): def __unicode__(self):
return self.title return self.title
class Meta: class Meta:
@ -22,7 +22,7 @@ class Article(models.Model):
headline = models.CharField(maxlength=100) headline = models.CharField(maxlength=100)
publications = models.ManyToManyField(Publication) publications = models.ManyToManyField(Publication)
def __str__(self): def __unicode__(self):
return self.headline return self.headline
class Meta: class Meta:

View File

@ -11,15 +11,15 @@ class Reporter(models.Model):
last_name = models.CharField(maxlength=30) last_name = models.CharField(maxlength=30)
email = models.EmailField() email = models.EmailField()
def __str__(self): def __unicode__(self):
return "%s %s" % (self.first_name, self.last_name) return u"%s %s" % (self.first_name, self.last_name)
class Article(models.Model): class Article(models.Model):
headline = models.CharField(maxlength=100) headline = models.CharField(maxlength=100)
pub_date = models.DateField() pub_date = models.DateField()
reporter = models.ForeignKey(Reporter) reporter = models.ForeignKey(Reporter)
def __str__(self): def __unicode__(self):
return self.headline return self.headline
class Meta: class Meta:

View File

@ -10,7 +10,7 @@ from django.db import models
class Reporter(models.Model): class Reporter(models.Model):
name = models.CharField(maxlength=30) name = models.CharField(maxlength=30)
def __str__(self): def __unicode__(self):
return self.name return self.name
class Article(models.Model): class Article(models.Model):
@ -20,7 +20,7 @@ class Article(models.Model):
class Meta: class Meta:
ordering = ('headline',) ordering = ('headline',)
def __str__(self): def __unicode__(self):
return self.headline return self.headline
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""

View File

@ -34,13 +34,13 @@ class Category(models.Model):
name = models.CharField(maxlength=20) name = models.CharField(maxlength=20)
url = models.CharField('The URL', maxlength=40) url = models.CharField('The URL', maxlength=40)
def __str__(self): def __unicode__(self):
return self.name return self.name
class Writer(models.Model): class Writer(models.Model):
name = models.CharField(maxlength=50, help_text='Use both first and last names.') name = models.CharField(maxlength=50, help_text='Use both first and last names.')
def __str__(self): def __unicode__(self):
return self.name return self.name
class Article(models.Model): class Article(models.Model):
@ -58,14 +58,14 @@ class Article(models.Model):
self.created = datetime.date.today() self.created = datetime.date.today()
return super(Article, self).save() return super(Article, self).save()
def __str__(self): def __unicode__(self):
return self.headline return self.headline
class PhoneNumber(models.Model): class PhoneNumber(models.Model):
phone = models.PhoneNumberField() phone = models.PhoneNumberField()
description = models.CharField(maxlength=20) description = models.CharField(maxlength=20)
def __str__(self): def __unicode__(self):
return self.phone return self.phone
__test__ = {'API_TESTS': """ __test__ = {'API_TESTS': """

View File

@ -10,21 +10,21 @@ class Place(models.Model):
name = models.CharField(maxlength=50) name = models.CharField(maxlength=50)
address = models.CharField(maxlength=80) address = models.CharField(maxlength=80)
def __str__(self): def __unicode__(self):
return "%s the place" % self.name return u"%s the place" % self.name
class Restaurant(Place): class Restaurant(Place):
serves_hot_dogs = models.BooleanField() serves_hot_dogs = models.BooleanField()
serves_pizza = models.BooleanField() serves_pizza = models.BooleanField()
def __str__(self): def __unicode__(self):
return "%s the restaurant" % self.name return u"%s the restaurant" % self.name
class ItalianRestaurant(Restaurant): class ItalianRestaurant(Restaurant):
serves_gnocchi = models.BooleanField() serves_gnocchi = models.BooleanField()
def __str__(self): def __unicode__(self):
return "%s the italian restaurant" % self.name return u"%s the italian restaurant" % self.name
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""
# Make sure Restaurant has the right fields in the right order. # Make sure Restaurant has the right fields in the right order.

View File

@ -12,23 +12,23 @@ class Place(models.Model):
name = models.CharField(maxlength=50) name = models.CharField(maxlength=50)
address = models.CharField(maxlength=80) address = models.CharField(maxlength=80)
def __str__(self): def __unicode__(self):
return "%s the place" % self.name return u"%s the place" % self.name
class Restaurant(models.Model): class Restaurant(models.Model):
place = models.OneToOneField(Place) place = models.OneToOneField(Place)
serves_hot_dogs = models.BooleanField() serves_hot_dogs = models.BooleanField()
serves_pizza = models.BooleanField() serves_pizza = models.BooleanField()
def __str__(self): def __unicode__(self):
return "%s the restaurant" % self.place.name return u"%s the restaurant" % self.place.name
class Waiter(models.Model): class Waiter(models.Model):
restaurant = models.ForeignKey(Restaurant) restaurant = models.ForeignKey(Restaurant)
name = models.CharField(maxlength=50) name = models.CharField(maxlength=50)
def __str__(self): def __unicode__(self):
return "%s the waiter at %s" % (self.name, self.restaurant) return u"%s the waiter at %s" % (self.name, self.restaurant)
class ManualPrimaryKey(models.Model): class ManualPrimaryKey(models.Model):
primary_key = models.CharField(maxlength=10, primary_key=True) primary_key = models.CharField(maxlength=10, primary_key=True)

View File

@ -20,7 +20,7 @@ class Article(models.Model):
class Meta: class Meta:
ordering = ('pub_date',) ordering = ('pub_date',)
def __str__(self): def __unicode__(self):
return self.headline return self.headline
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""

View File

@ -21,7 +21,7 @@ class Article(models.Model):
class Meta: class Meta:
ordering = ('-pub_date', 'headline') ordering = ('-pub_date', 'headline')
def __str__(self): def __unicode__(self):
return self.headline return self.headline
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""

View File

@ -12,7 +12,7 @@ class Article(models.Model):
headline = models.CharField(maxlength=100, default='Default headline') headline = models.CharField(maxlength=100, default='Default headline')
pub_date = models.DateTimeField() pub_date = models.DateTimeField()
def __str__(self): def __unicode__(self):
return self.headline return self.headline
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""

View File

@ -21,7 +21,7 @@ class Thing(models.Model):
class Meta: class Meta:
db_table = 'select' db_table = 'select'
def __str__(self): def __unicode__(self):
return self.when return self.when
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""

View File

@ -9,14 +9,14 @@ from django.db import models
class User(models.Model): class User(models.Model):
name = models.CharField(maxlength=200) name = models.CharField(maxlength=200)
def __str__(self): def __unicode__(self):
return self.name return self.name
class Poll(models.Model): class Poll(models.Model):
question = models.CharField(maxlength=200) question = models.CharField(maxlength=200)
creator = models.ForeignKey(User) creator = models.ForeignKey(User)
def __str__(self): def __unicode__(self):
return self.question return self.question
class Choice(models.Model): class Choice(models.Model):
@ -24,7 +24,7 @@ class Choice(models.Model):
poll = models.ForeignKey(Poll, related_name="poll_choice") poll = models.ForeignKey(Poll, related_name="poll_choice")
related_poll = models.ForeignKey(Poll, related_name="related_choice") related_poll = models.ForeignKey(Poll, related_name="related_choice")
def __str(self): def __unicode__(self):
return self.name return self.name
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""

View File

@ -11,8 +11,8 @@ class Person(models.Model):
first_name = models.CharField(maxlength=20) first_name = models.CharField(maxlength=20)
last_name = models.CharField(maxlength=20) last_name = models.CharField(maxlength=20)
def __str__(self): def __unicode__(self):
return "%s %s" % (self.first_name, self.last_name) return u"%s %s" % (self.first_name, self.last_name)
def save(self): def save(self):
print "Before save" print "Before save"

View File

@ -13,49 +13,49 @@ from django.db import models
class Domain(models.Model): class Domain(models.Model):
name = models.CharField(maxlength=50) name = models.CharField(maxlength=50)
def __str__(self): def __unicode__(self):
return self.name return self.name
class Kingdom(models.Model): class Kingdom(models.Model):
name = models.CharField(maxlength=50) name = models.CharField(maxlength=50)
domain = models.ForeignKey(Domain) domain = models.ForeignKey(Domain)
def __str__(self): def __unicode__(self):
return self.name return self.name
class Phylum(models.Model): class Phylum(models.Model):
name = models.CharField(maxlength=50) name = models.CharField(maxlength=50)
kingdom = models.ForeignKey(Kingdom) kingdom = models.ForeignKey(Kingdom)
def __str__(self): def __unicode__(self):
return self.name return self.name
class Klass(models.Model): class Klass(models.Model):
name = models.CharField(maxlength=50) name = models.CharField(maxlength=50)
phylum = models.ForeignKey(Phylum) phylum = models.ForeignKey(Phylum)
def __str__(self): def __unicode__(self):
return self.name return self.name
class Order(models.Model): class Order(models.Model):
name = models.CharField(maxlength=50) name = models.CharField(maxlength=50)
klass = models.ForeignKey(Klass) klass = models.ForeignKey(Klass)
def __str__(self): def __unicode__(self):
return self.name return self.name
class Family(models.Model): class Family(models.Model):
name = models.CharField(maxlength=50) name = models.CharField(maxlength=50)
order = models.ForeignKey(Order) order = models.ForeignKey(Order)
def __str__(self): def __unicode__(self):
return self.name return self.name
class Genus(models.Model): class Genus(models.Model):
name = models.CharField(maxlength=50) name = models.CharField(maxlength=50)
family = models.ForeignKey(Family) family = models.ForeignKey(Family)
def __str__(self): def __unicode__(self):
return self.name return self.name
class Species(models.Model): class Species(models.Model):
name = models.CharField(maxlength=50) name = models.CharField(maxlength=50)
genus = models.ForeignKey(Genus) genus = models.ForeignKey(Genus)
def __str__(self): def __unicode__(self):
return self.name return self.name
def create_tree(stringtree): def create_tree(stringtree):

View File

@ -13,7 +13,7 @@ class Category(models.Model):
class Meta: class Meta:
ordering = ('name',) ordering = ('name',)
def __str__(self): def __unicode__(self):
return self.name return self.name
class Author(models.Model): class Author(models.Model):
@ -22,7 +22,7 @@ class Author(models.Model):
class Meta: class Meta:
ordering = ('name',) ordering = ('name',)
def __str__(self): def __unicode__(self):
return self.name return self.name
class Article(models.Model): class Article(models.Model):
@ -34,15 +34,15 @@ class Article(models.Model):
class Meta: class Meta:
ordering = ('pub_date',) ordering = ('pub_date',)
def __str__(self): def __unicode__(self):
return self.headline return self.headline
class AuthorProfile(models.Model): class AuthorProfile(models.Model):
author = models.OneToOneField(Author) author = models.OneToOneField(Author)
date_of_birth = models.DateField() date_of_birth = models.DateField()
def __str__(self): def __unicode__(self):
return "Profile of %s" % self.author return u"Profile of %s" % self.author
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""
# Create some data: # Create some data:

View File

@ -2,24 +2,27 @@
""" """
2. Adding __str__() or __unicode__() to models 2. Adding __str__() or __unicode__() to models
Although it's not a strict requirement, each model should have a ``__str__()`` Although it's not a strict requirement, each model should have a
method to return a "human-readable" representation of the object. Do this not ``_str__()`` or ``__unicode__()`` method to return a "human-readable"
only for your own sanity when dealing with the interactive prompt, but also representation of the object. Do this not only for your own sanity when dealing
because objects' representations are used throughout Django's with the interactive prompt, but also because objects' representations are used
automatically-generated admin. throughout Django's automatically-generated admin.
For international applications, you should write ``__unicode__``() method Normally, you should write ``__unicode__``() method, since this will work for
instead. all field types (and Django will automatically provide an appropriate
``__str__()`` method). However, you can write a ``__str__()`` method directly,
if you prefer. You must be careful to encode the results correctly, though.
""" """
from django.db import models from django.db import models
from django.utils.encoding import smart_str
class Article(models.Model): class Article(models.Model):
headline = models.CharField(maxlength=100) headline = models.CharField(maxlength=100)
pub_date = models.DateTimeField() pub_date = models.DateTimeField()
def __str__(self): def __str__(self):
return self.headline return smart_str(self.headline)
class InternationalArticle(models.Model): class InternationalArticle(models.Model):
headline = models.CharField(maxlength=100) headline = models.CharField(maxlength=100)

View File

@ -14,8 +14,8 @@ class Reporter(models.Model):
last_name = models.CharField(maxlength=30) last_name = models.CharField(maxlength=30)
email = models.EmailField() email = models.EmailField()
def __str__(self): def __unicode__(self):
return "%s %s" % (self.first_name, self.last_name) return u"%s %s" % (self.first_name, self.last_name)
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""
>>> from django.db import connection, transaction >>> from django.db import connection, transaction

View File

@ -17,7 +17,7 @@ class Person(models.Model):
favorite_moment = models.DateTimeField() favorite_moment = models.DateTimeField()
email = models.EmailField() email = models.EmailField()
def __str__(self): def __unicode__(self):
return self.name return self.name
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""

View File

@ -4,7 +4,7 @@ class Animal(models.Model):
name = models.CharField(maxlength=150) name = models.CharField(maxlength=150)
latin_name = models.CharField(maxlength=150) latin_name = models.CharField(maxlength=150)
def __str__(self): def __unicode__(self):
return self.common_name return self.common_name
class Plant(models.Model): class Plant(models.Model):

View File

@ -3,15 +3,15 @@ from django.db import models
class Poll(models.Model): class Poll(models.Model):
question = models.CharField(maxlength=200) question = models.CharField(maxlength=200)
def __str__(self): def __unicode__(self):
return "Q: %s " % self.question return u"Q: %s " % self.question
class Choice(models.Model): class Choice(models.Model):
poll = models.ForeignKey(Poll) poll = models.ForeignKey(Poll)
choice = models.CharField(maxlength=200) choice = models.CharField(maxlength=200)
def __str__(self): def __unicode__(self):
return "Choice: %s in poll %s" % (self.choice, self.poll) return u"Choice: %s in poll %s" % (self.choice, self.poll)
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""
# Regression test for the use of None as a query value. None is interpreted as # Regression test for the use of None as a query value. None is interpreted as

View File

@ -4,23 +4,23 @@ class Place(models.Model):
name = models.CharField(maxlength=50) name = models.CharField(maxlength=50)
address = models.CharField(maxlength=80) address = models.CharField(maxlength=80)
def __str__(self): def __unicode__(self):
return "%s the place" % self.name return u"%s the place" % self.name
class Restaurant(models.Model): class Restaurant(models.Model):
place = models.OneToOneField(Place) place = models.OneToOneField(Place)
serves_hot_dogs = models.BooleanField() serves_hot_dogs = models.BooleanField()
serves_pizza = models.BooleanField() serves_pizza = models.BooleanField()
def __str__(self): def __unicode__(self):
return "%s the restaurant" % self.place.name return u"%s the restaurant" % self.place.name
class Favorites(models.Model): class Favorites(models.Model):
name = models.CharField(maxlength = 50) name = models.CharField(maxlength = 50)
restaurants = models.ManyToManyField(Restaurant) restaurants = models.ManyToManyField(Restaurant)
def __str__(self): def __unicode__(self):
return "Favorites for %s" % self.name return u"Favorites for %s" % self.name
__test__ = {'API_TESTS':""" __test__ = {'API_TESTS':"""
# Regression test for #1064 and #1506: Check that we create models via the m2m # Regression test for #1064 and #1506: Check that we create models via the m2m