[py3] Refactored __unicode__ to __str__.

* Renamed the __unicode__ methods
* Applied the python_2_unicode_compatible decorator
* Removed the StrAndUnicode mix-in that is superseded by
  python_2_unicode_compatible
* Kept the __unicode__ methods in classes that specifically
  test it under Python 2
This commit is contained in:
Aymeric Augustin 2012-08-12 12:32:08 +02:00
parent 79d62a7175
commit d4a0b27838
142 changed files with 1072 additions and 481 deletions

View File

@ -6,6 +6,7 @@ from django.contrib.auth.models import User
from django.contrib.admin.util import quote from django.contrib.admin.util import quote
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.utils.encoding import smart_text from django.utils.encoding import smart_text
from django.utils.encoding import python_2_unicode_compatible
ADDITION = 1 ADDITION = 1
CHANGE = 2 CHANGE = 2
@ -16,6 +17,7 @@ class LogEntryManager(models.Manager):
e = self.model(None, None, user_id, content_type_id, smart_text(object_id), object_repr[:200], action_flag, change_message) e = self.model(None, None, user_id, content_type_id, smart_text(object_id), object_repr[:200], action_flag, change_message)
e.save() e.save()
@python_2_unicode_compatible
class LogEntry(models.Model): class LogEntry(models.Model):
action_time = models.DateTimeField(_('action time'), auto_now=True) action_time = models.DateTimeField(_('action time'), auto_now=True)
user = models.ForeignKey(User) user = models.ForeignKey(User)
@ -36,7 +38,7 @@ class LogEntry(models.Model):
def __repr__(self): def __repr__(self):
return smart_text(self.action_time) return smart_text(self.action_time)
def __unicode__(self): def __str__(self):
if self.action_flag == ADDITION: if self.action_flag == ADDITION:
return _('Added "%(object)s".') % {'object': self.object_repr} return _('Added "%(object)s".') % {'object': self.object_repr}
elif self.action_flag == CHANGE: elif self.action_flag == CHANGE:

View File

@ -16,6 +16,7 @@ from django.contrib.auth.hashers import (
check_password, make_password, is_password_usable, UNUSABLE_PASSWORD) check_password, make_password, is_password_usable, UNUSABLE_PASSWORD)
from django.contrib.auth.signals import user_logged_in from django.contrib.auth.signals import user_logged_in
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.utils.encoding import python_2_unicode_compatible
def update_last_login(sender, user, **kwargs): def update_last_login(sender, user, **kwargs):
@ -41,6 +42,7 @@ class PermissionManager(models.Manager):
) )
@python_2_unicode_compatible
class Permission(models.Model): class Permission(models.Model):
""" """
The permissions system provides a way to assign permissions to specific The permissions system provides a way to assign permissions to specific
@ -76,7 +78,7 @@ class Permission(models.Model):
ordering = ('content_type__app_label', 'content_type__model', ordering = ('content_type__app_label', 'content_type__model',
'codename') 'codename')
def __unicode__(self): def __str__(self):
return "%s | %s | %s" % ( return "%s | %s | %s" % (
six.text_type(self.content_type.app_label), six.text_type(self.content_type.app_label),
six.text_type(self.content_type), six.text_type(self.content_type),
@ -94,6 +96,7 @@ class GroupManager(models.Manager):
def get_by_natural_key(self, name): def get_by_natural_key(self, name):
return self.get(name=name) return self.get(name=name)
@python_2_unicode_compatible
class Group(models.Model): class Group(models.Model):
""" """
Groups are a generic way of categorizing users to apply permissions, or Groups are a generic way of categorizing users to apply permissions, or
@ -121,7 +124,7 @@ class Group(models.Model):
verbose_name = _('group') verbose_name = _('group')
verbose_name_plural = _('groups') verbose_name_plural = _('groups')
def __unicode__(self): def __str__(self):
return self.name return self.name
def natural_key(self): def natural_key(self):
@ -221,6 +224,7 @@ def _user_has_module_perms(user, app_label):
return False return False
@python_2_unicode_compatible
class User(models.Model): class User(models.Model):
""" """
Users within the Django authentication system are represented by this Users within the Django authentication system are represented by this
@ -259,7 +263,7 @@ class User(models.Model):
verbose_name = _('user') verbose_name = _('user')
verbose_name_plural = _('users') verbose_name_plural = _('users')
def __unicode__(self): def __str__(self):
return self.username return self.username
def natural_key(self): def natural_key(self):
@ -403,6 +407,7 @@ class User(models.Model):
return self._profile_cache return self._profile_cache
@python_2_unicode_compatible
class AnonymousUser(object): class AnonymousUser(object):
id = None id = None
pk = None pk = None
@ -416,7 +421,7 @@ class AnonymousUser(object):
def __init__(self): def __init__(self):
pass pass
def __unicode__(self): def __str__(self):
return 'AnonymousUser' return 'AnonymousUser'
def __eq__(self, other): def __eq__(self, other):

View File

@ -8,6 +8,7 @@ from django.core import urlresolvers
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.utils import timezone from django.utils import timezone
from django.conf import settings from django.conf import settings
from django.utils.encoding import python_2_unicode_compatible
COMMENT_MAX_LENGTH = getattr(settings,'COMMENT_MAX_LENGTH',3000) COMMENT_MAX_LENGTH = getattr(settings,'COMMENT_MAX_LENGTH',3000)
@ -39,6 +40,7 @@ class BaseCommentAbstractModel(models.Model):
args=(self.content_type_id, self.object_pk) args=(self.content_type_id, self.object_pk)
) )
@python_2_unicode_compatible
class Comment(BaseCommentAbstractModel): class Comment(BaseCommentAbstractModel):
""" """
A user comment about some object. A user comment about some object.
@ -76,7 +78,7 @@ class Comment(BaseCommentAbstractModel):
verbose_name = _('comment') verbose_name = _('comment')
verbose_name_plural = _('comments') verbose_name_plural = _('comments')
def __unicode__(self): def __str__(self):
return "%s: %s..." % (self.name, self.comment[:50]) return "%s: %s..." % (self.name, self.comment[:50])
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
@ -153,6 +155,7 @@ class Comment(BaseCommentAbstractModel):
} }
return _('Posted by %(user)s at %(date)s\n\n%(comment)s\n\nhttp://%(domain)s%(url)s') % d return _('Posted by %(user)s at %(date)s\n\n%(comment)s\n\nhttp://%(domain)s%(url)s') % d
@python_2_unicode_compatible
class CommentFlag(models.Model): class CommentFlag(models.Model):
""" """
Records a flag on a comment. This is intentionally flexible; right now, a Records a flag on a comment. This is intentionally flexible; right now, a
@ -182,7 +185,7 @@ class CommentFlag(models.Model):
verbose_name = _('comment flag') verbose_name = _('comment flag')
verbose_name_plural = _('comment flags') verbose_name_plural = _('comment flags')
def __unicode__(self): def __str__(self):
return "%s flag of comment ID %s by %s" % \ return "%s flag of comment ID %s by %s" % \
(self.flag, self.comment_id, self.user.username) (self.flag, self.comment_id, self.user.username)

View File

@ -1,6 +1,7 @@
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.utils.encoding import smart_text, force_text from django.utils.encoding import smart_text, force_text
from django.utils.encoding import python_2_unicode_compatible
class ContentTypeManager(models.Manager): class ContentTypeManager(models.Manager):
@ -122,6 +123,7 @@ class ContentTypeManager(models.Manager):
self.__class__._cache.setdefault(using, {})[key] = ct self.__class__._cache.setdefault(using, {})[key] = ct
self.__class__._cache.setdefault(using, {})[ct.id] = ct self.__class__._cache.setdefault(using, {})[ct.id] = ct
@python_2_unicode_compatible
class ContentType(models.Model): class ContentType(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
app_label = models.CharField(max_length=100) app_label = models.CharField(max_length=100)
@ -135,7 +137,7 @@ class ContentType(models.Model):
ordering = ('name',) ordering = ('name',)
unique_together = (('app_label', 'model'),) unique_together = (('app_label', 'model'),)
def __unicode__(self): def __str__(self):
# self.name is deprecated in favor of using model's verbose_name, which # self.name is deprecated in favor of using model's verbose_name, which
# can be translated. Formal deprecation is delayed until we have DB # can be translated. Formal deprecation is delayed until we have DB
# migration to be able to remove the field from the database along with # migration to be able to remove the field from the database along with

View File

@ -8,6 +8,7 @@ from django.http import HttpRequest, Http404
from django.test import TestCase from django.test import TestCase
from django.utils.http import urlquote from django.utils.http import urlquote
from django.utils import six from django.utils import six
from django.utils.encoding import python_2_unicode_compatible
class ConcreteModel(models.Model): class ConcreteModel(models.Model):
@ -17,13 +18,14 @@ class ProxyModel(ConcreteModel):
class Meta: class Meta:
proxy = True proxy = True
@python_2_unicode_compatible
class FooWithoutUrl(models.Model): class FooWithoutUrl(models.Model):
""" """
Fake model not defining ``get_absolute_url`` for Fake model not defining ``get_absolute_url`` for
:meth:`ContentTypesTests.test_shortcut_view_without_get_absolute_url`""" :meth:`ContentTypesTests.test_shortcut_view_without_get_absolute_url`"""
name = models.CharField(max_length=30, unique=True) name = models.CharField(max_length=30, unique=True)
def __unicode__(self): def __str__(self):
return self.name return self.name

View File

@ -9,6 +9,7 @@ from django.utils import formats
from django.utils.text import capfirst from django.utils.text import capfirst
from django.utils.encoding import smart_text, smart_bytes, iri_to_uri from django.utils.encoding import smart_text, smart_bytes, iri_to_uri
from django.db.models.query import QuerySet from django.db.models.query import QuerySet
from django.utils.encoding import python_2_unicode_compatible
EMPTY_VALUE = '(None)' EMPTY_VALUE = '(None)'
DISPLAY_SIZE = 100 DISPLAY_SIZE = 100
@ -84,6 +85,7 @@ class EasyChoice(object):
def url(self): def url(self):
return '%s%s/%s/%s/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name, self.field.field.name, iri_to_uri(self.value)) return '%s%s/%s/%s/%s/' % (self.model.site.root_url, self.model.model._meta.app_label, self.model.model._meta.module_name, self.field.field.name, iri_to_uri(self.value))
@python_2_unicode_compatible
class EasyInstance(object): class EasyInstance(object):
def __init__(self, easy_model, instance): def __init__(self, easy_model, instance):
self.model, self.instance = easy_model, instance self.model, self.instance = easy_model, instance
@ -91,7 +93,7 @@ class EasyInstance(object):
def __repr__(self): def __repr__(self):
return smart_bytes('<EasyInstance for %s (%s)>' % (self.model.model._meta.object_name, self.instance._get_pk_val())) return smart_bytes('<EasyInstance for %s (%s)>' % (self.model.model._meta.object_name, self.instance._get_pk_val()))
def __unicode__(self): def __str__(self):
val = smart_text(self.instance) val = smart_text(self.instance)
if len(val) > DISPLAY_SIZE: if len(val) > DISPLAY_SIZE:
return val[:DISPLAY_SIZE] + '...' return val[:DISPLAY_SIZE] + '...'

View File

@ -1,26 +1,30 @@
from django.contrib import databrowse from django.contrib import databrowse
from django.db import models from django.db import models
from django.test import TestCase from django.test import TestCase
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class SomeModel(models.Model): class SomeModel(models.Model):
some_field = models.CharField(max_length=50) some_field = models.CharField(max_length=50)
def __unicode__(self): def __str__(self):
return self.some_field return self.some_field
@python_2_unicode_compatible
class SomeOtherModel(models.Model): class SomeOtherModel(models.Model):
some_other_field = models.CharField(max_length=50) some_other_field = models.CharField(max_length=50)
def __unicode__(self): def __str__(self):
return self.some_other_field return self.some_other_field
@python_2_unicode_compatible
class YetAnotherModel(models.Model): class YetAnotherModel(models.Model):
yet_another_field = models.CharField(max_length=50) yet_another_field = models.CharField(max_length=50)
def __unicode__(self): def __str__(self):
return self.yet_another_field return self.yet_another_field

View File

@ -3,8 +3,10 @@ from __future__ import unicode_literals
from django.db import models from django.db import models
from django.contrib.sites.models import Site from django.contrib.sites.models import Site
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class FlatPage(models.Model): class FlatPage(models.Model):
url = models.CharField(_('URL'), max_length=100, db_index=True) url = models.CharField(_('URL'), max_length=100, db_index=True)
title = models.CharField(_('title'), max_length=200) title = models.CharField(_('title'), max_length=200)
@ -21,7 +23,7 @@ class FlatPage(models.Model):
verbose_name_plural = _('flat pages') verbose_name_plural = _('flat pages')
ordering = ('url',) ordering = ('url',)
def __unicode__(self): def __str__(self):
return "%s -- %s" % (self.url, self.title) return "%s -- %s" % (self.url, self.title)
def get_absolute_url(self): def get_absolute_url(self):

View File

@ -5,6 +5,7 @@ Base/mixin classes for the spatial backend database operations and the
import re import re
from django.contrib.gis import gdal from django.contrib.gis import gdal
from django.utils import six from django.utils import six
from django.utils.encoding import python_2_unicode_compatible
class BaseSpatialOperations(object): class BaseSpatialOperations(object):
""" """
@ -131,6 +132,7 @@ class BaseSpatialOperations(object):
def spatial_ref_sys(self): def spatial_ref_sys(self):
raise NotImplementedError raise NotImplementedError
@python_2_unicode_compatible
class SpatialRefSysMixin(object): class SpatialRefSysMixin(object):
""" """
The SpatialRefSysMixin is a class used by the database-dependent The SpatialRefSysMixin is a class used by the database-dependent
@ -325,7 +327,7 @@ class SpatialRefSysMixin(object):
radius, flattening = sphere_params radius, flattening = sphere_params
return 'SPHEROID["%s",%s,%s]' % (sphere_name, radius, flattening) return 'SPHEROID["%s",%s,%s]' % (sphere_name, radius, flattening)
def __unicode__(self): def __str__(self):
""" """
Returns the string representation. If GDAL is installed, Returns the string representation. If GDAL is installed,
it will be 'pretty' OGC WKT. it will be 'pretty' OGC WKT.

View File

@ -9,7 +9,9 @@
""" """
from django.contrib.gis.db import models from django.contrib.gis.db import models
from django.contrib.gis.db.backends.base import SpatialRefSysMixin from django.contrib.gis.db.backends.base import SpatialRefSysMixin
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class GeometryColumns(models.Model): class GeometryColumns(models.Model):
"Maps to the Oracle USER_SDO_GEOM_METADATA table." "Maps to the Oracle USER_SDO_GEOM_METADATA table."
table_name = models.CharField(max_length=32) table_name = models.CharField(max_length=32)
@ -36,7 +38,7 @@ class GeometryColumns(models.Model):
""" """
return 'column_name' return 'column_name'
def __unicode__(self): def __str__(self):
return '%s - %s (SRID: %s)' % (self.table_name, self.column_name, self.srid) return '%s - %s (SRID: %s)' % (self.table_name, self.column_name, self.srid)
class SpatialRefSys(models.Model, SpatialRefSysMixin): class SpatialRefSys(models.Model, SpatialRefSysMixin):

View File

@ -3,7 +3,9 @@
""" """
from django.db import models from django.db import models
from django.contrib.gis.db.backends.base import SpatialRefSysMixin from django.contrib.gis.db.backends.base import SpatialRefSysMixin
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class GeometryColumns(models.Model): class GeometryColumns(models.Model):
""" """
The 'geometry_columns' table from the PostGIS. See the PostGIS The 'geometry_columns' table from the PostGIS. See the PostGIS
@ -37,7 +39,7 @@ class GeometryColumns(models.Model):
""" """
return 'f_geometry_column' return 'f_geometry_column'
def __unicode__(self): def __str__(self):
return "%s.%s - %dD %s field (SRID: %d)" % \ return "%s.%s - %dD %s field (SRID: %d)" % \
(self.f_table_name, self.f_geometry_column, (self.f_table_name, self.f_geometry_column,
self.coord_dimension, self.type, self.srid) self.coord_dimension, self.type, self.srid)

View File

@ -3,7 +3,9 @@
""" """
from django.db import models from django.db import models
from django.contrib.gis.db.backends.base import SpatialRefSysMixin from django.contrib.gis.db.backends.base import SpatialRefSysMixin
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class GeometryColumns(models.Model): class GeometryColumns(models.Model):
""" """
The 'geometry_columns' table from SpatiaLite. The 'geometry_columns' table from SpatiaLite.
@ -35,7 +37,7 @@ class GeometryColumns(models.Model):
""" """
return 'f_geometry_column' return 'f_geometry_column'
def __unicode__(self): def __str__(self):
return "%s.%s - %dD %s field (SRID: %d)" % \ return "%s.%s - %dD %s field (SRID: %d)" % \
(self.f_table_name, self.f_geometry_column, (self.f_table_name, self.f_geometry_column,
self.coord_dimension, self.type, self.srid) self.coord_dimension, self.type, self.srid)

View File

@ -2,8 +2,10 @@ from django.contrib.gis.geos import fromstr, Point, LineString, LinearRing, Poly
from django.utils.functional import total_ordering from django.utils.functional import total_ordering
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.utils import six from django.utils import six
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class GEvent(object): class GEvent(object):
""" """
A Python wrapper for the Google GEvent object. A Python wrapper for the Google GEvent object.
@ -48,10 +50,11 @@ class GEvent(object):
self.event = event self.event = event
self.action = action self.action = action
def __unicode__(self): def __str__(self):
"Returns the parameter part of a GEvent." "Returns the parameter part of a GEvent."
return mark_safe('"%s", %s' %(self.event, self.action)) return mark_safe('"%s", %s' %(self.event, self.action))
@python_2_unicode_compatible
class GOverlayBase(object): class GOverlayBase(object):
def __init__(self): def __init__(self):
self.events = [] self.events = []
@ -64,7 +67,7 @@ class GOverlayBase(object):
"Attaches a GEvent to the overlay object." "Attaches a GEvent to the overlay object."
self.events.append(event) self.events.append(event)
def __unicode__(self): def __str__(self):
"The string representation is the JavaScript API call." "The string representation is the JavaScript API call."
return mark_safe('%s(%s)' % (self.__class__.__name__, self.js_params)) return mark_safe('%s(%s)' % (self.__class__.__name__, self.js_params))

View File

@ -1,50 +1,58 @@
from django.contrib.gis.db import models from django.contrib.gis.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class SouthTexasCity(models.Model): class SouthTexasCity(models.Model):
"City model on projected coordinate system for South Texas." "City model on projected coordinate system for South Texas."
name = models.CharField(max_length=30) name = models.CharField(max_length=30)
point = models.PointField(srid=32140) point = models.PointField(srid=32140)
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): return self.name def __str__(self): return self.name
@python_2_unicode_compatible
class SouthTexasCityFt(models.Model): class SouthTexasCityFt(models.Model):
"Same City model as above, but U.S. survey feet are the units." "Same City model as above, but U.S. survey feet are the units."
name = models.CharField(max_length=30) name = models.CharField(max_length=30)
point = models.PointField(srid=2278) point = models.PointField(srid=2278)
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): return self.name def __str__(self): return self.name
@python_2_unicode_compatible
class AustraliaCity(models.Model): class AustraliaCity(models.Model):
"City model for Australia, using WGS84." "City model for Australia, using WGS84."
name = models.CharField(max_length=30) name = models.CharField(max_length=30)
point = models.PointField() point = models.PointField()
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): return self.name def __str__(self): return self.name
@python_2_unicode_compatible
class CensusZipcode(models.Model): class CensusZipcode(models.Model):
"Model for a few South Texas ZIP codes (in original Census NAD83)." "Model for a few South Texas ZIP codes (in original Census NAD83)."
name = models.CharField(max_length=5) name = models.CharField(max_length=5)
poly = models.PolygonField(srid=4269) poly = models.PolygonField(srid=4269)
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): return self.name def __str__(self): return self.name
@python_2_unicode_compatible
class SouthTexasZipcode(models.Model): class SouthTexasZipcode(models.Model):
"Model for a few South Texas ZIP codes." "Model for a few South Texas ZIP codes."
name = models.CharField(max_length=5) name = models.CharField(max_length=5)
poly = models.PolygonField(srid=32140, null=True) poly = models.PolygonField(srid=32140, null=True)
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): return self.name def __str__(self): return self.name
@python_2_unicode_compatible
class Interstate(models.Model): class Interstate(models.Model):
"Geodetic model for U.S. Interstates." "Geodetic model for U.S. Interstates."
name = models.CharField(max_length=10) name = models.CharField(max_length=10)
path = models.LineStringField() path = models.LineStringField()
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): return self.name def __str__(self): return self.name
@python_2_unicode_compatible
class SouthTexasInterstate(models.Model): class SouthTexasInterstate(models.Model):
"Projected model for South Texas Interstates." "Projected model for South Texas Interstates."
name = models.CharField(max_length=10) name = models.CharField(max_length=10)
path = models.LineStringField(srid=32140) path = models.LineStringField(srid=32140)
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): return self.name def __str__(self): return self.name

View File

@ -1,59 +1,67 @@
from django.contrib.gis.db import models from django.contrib.gis.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class City3D(models.Model): class City3D(models.Model):
name = models.CharField(max_length=30) name = models.CharField(max_length=30)
point = models.PointField(dim=3) point = models.PointField(dim=3)
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Interstate2D(models.Model): class Interstate2D(models.Model):
name = models.CharField(max_length=30) name = models.CharField(max_length=30)
line = models.LineStringField(srid=4269) line = models.LineStringField(srid=4269)
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Interstate3D(models.Model): class Interstate3D(models.Model):
name = models.CharField(max_length=30) name = models.CharField(max_length=30)
line = models.LineStringField(dim=3, srid=4269) line = models.LineStringField(dim=3, srid=4269)
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class InterstateProj2D(models.Model): class InterstateProj2D(models.Model):
name = models.CharField(max_length=30) name = models.CharField(max_length=30)
line = models.LineStringField(srid=32140) line = models.LineStringField(srid=32140)
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class InterstateProj3D(models.Model): class InterstateProj3D(models.Model):
name = models.CharField(max_length=30) name = models.CharField(max_length=30)
line = models.LineStringField(dim=3, srid=32140) line = models.LineStringField(dim=3, srid=32140)
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Polygon2D(models.Model): class Polygon2D(models.Model):
name = models.CharField(max_length=30) name = models.CharField(max_length=30)
poly = models.PolygonField(srid=32140) poly = models.PolygonField(srid=32140)
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Polygon3D(models.Model): class Polygon3D(models.Model):
name = models.CharField(max_length=30) name = models.CharField(max_length=30)
poly = models.PolygonField(dim=3, srid=32140) poly = models.PolygonField(dim=3, srid=32140)
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): def __str__(self):
return self.name return self.name
class Point2D(models.Model): class Point2D(models.Model):

View File

@ -1,10 +1,12 @@
from django.contrib.gis.db import models from django.contrib.gis.db import models
from django.contrib.gis import admin from django.contrib.gis import admin
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class City(models.Model): class City(models.Model):
name = models.CharField(max_length=30) name = models.CharField(max_length=30)
point = models.PointField() point = models.PointField()
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): return self.name def __str__(self): return self.name
admin.site.register(City, admin.OSMGeoAdmin) admin.site.register(City, admin.OSMGeoAdmin)

View File

@ -1,20 +1,23 @@
from django.contrib.gis.db import models from django.contrib.gis.db import models
from django.contrib.gis.tests.utils import mysql, spatialite from django.contrib.gis.tests.utils import mysql, spatialite
from django.utils.encoding import python_2_unicode_compatible
# MySQL spatial indices can't handle NULL geometries. # MySQL spatial indices can't handle NULL geometries.
null_flag = not mysql null_flag = not mysql
@python_2_unicode_compatible
class Country(models.Model): class Country(models.Model):
name = models.CharField(max_length=30) name = models.CharField(max_length=30)
mpoly = models.MultiPolygonField() # SRID, by default, is 4326 mpoly = models.MultiPolygonField() # SRID, by default, is 4326
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): return self.name def __str__(self): return self.name
@python_2_unicode_compatible
class City(models.Model): class City(models.Model):
name = models.CharField(max_length=30) name = models.CharField(max_length=30)
point = models.PointField() point = models.PointField()
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): return self.name def __str__(self): return self.name
# This is an inherited model from City # This is an inherited model from City
class PennsylvaniaCity(City): class PennsylvaniaCity(City):
@ -22,28 +25,31 @@ class PennsylvaniaCity(City):
founded = models.DateTimeField(null=True) founded = models.DateTimeField(null=True)
objects = models.GeoManager() # TODO: This should be implicitly inherited. objects = models.GeoManager() # TODO: This should be implicitly inherited.
@python_2_unicode_compatible
class State(models.Model): class State(models.Model):
name = models.CharField(max_length=30) name = models.CharField(max_length=30)
poly = models.PolygonField(null=null_flag) # Allowing NULL geometries here. poly = models.PolygonField(null=null_flag) # Allowing NULL geometries here.
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): return self.name def __str__(self): return self.name
@python_2_unicode_compatible
class Track(models.Model): class Track(models.Model):
name = models.CharField(max_length=30) name = models.CharField(max_length=30)
line = models.LineStringField() line = models.LineStringField()
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): return self.name def __str__(self): return self.name
class Truth(models.Model): class Truth(models.Model):
val = models.BooleanField() val = models.BooleanField()
objects = models.GeoManager() objects = models.GeoManager()
if not spatialite: if not spatialite:
@python_2_unicode_compatible
class Feature(models.Model): class Feature(models.Model):
name = models.CharField(max_length=20) name = models.CharField(max_length=20)
geom = models.GeometryField() geom = models.GeometryField()
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): return self.name def __str__(self): return self.name
class MinusOneSRID(models.Model): class MinusOneSRID(models.Model):
geom = models.PointField(srid=-1) # Minus one SRID. geom = models.PointField(srid=-1) # Minus one SRID.

View File

@ -1,20 +1,24 @@
from django.contrib.gis.db import models from django.contrib.gis.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class City(models.Model): class City(models.Model):
name = models.CharField(max_length=30) name = models.CharField(max_length=30)
point = models.PointField(geography=True) point = models.PointField(geography=True)
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): return self.name def __str__(self): return self.name
@python_2_unicode_compatible
class Zipcode(models.Model): class Zipcode(models.Model):
code = models.CharField(max_length=10) code = models.CharField(max_length=10)
poly = models.PolygonField(geography=True) poly = models.PolygonField(geography=True)
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): return self.code def __str__(self): return self.code
@python_2_unicode_compatible
class County(models.Model): class County(models.Model):
name = models.CharField(max_length=25) name = models.CharField(max_length=25)
state = models.CharField(max_length=20) state = models.CharField(max_length=20)
mpoly = models.MultiPolygonField(geography=True) mpoly = models.MultiPolygonField(geography=True)
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): return ' County, '.join([self.name, self.state]) def __str__(self): return ' County, '.join([self.name, self.state])

View File

@ -1,17 +1,20 @@
from django.contrib.gis.db import models from django.contrib.gis.db import models
from django.contrib.localflavor.us.models import USStateField from django.contrib.localflavor.us.models import USStateField
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Location(models.Model): class Location(models.Model):
point = models.PointField() point = models.PointField()
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): return self.point.wkt def __str__(self): return self.point.wkt
@python_2_unicode_compatible
class City(models.Model): class City(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
state = USStateField() state = USStateField()
location = models.ForeignKey(Location) location = models.ForeignKey(Location)
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): return self.name def __str__(self): return self.name
class AugmentedLocation(Location): class AugmentedLocation(Location):
extra_text = models.TextField(blank=True) extra_text = models.TextField(blank=True)
@ -22,6 +25,7 @@ class DirectoryEntry(models.Model):
location = models.ForeignKey(AugmentedLocation) location = models.ForeignKey(AugmentedLocation)
objects = models.GeoManager() objects = models.GeoManager()
@python_2_unicode_compatible
class Parcel(models.Model): class Parcel(models.Model):
name = models.CharField(max_length=30) name = models.CharField(max_length=30)
city = models.ForeignKey(City) city = models.ForeignKey(City)
@ -31,7 +35,7 @@ class Parcel(models.Model):
border1 = models.PolygonField() border1 = models.PolygonField()
border2 = models.PolygonField(srid=2276) border2 = models.PolygonField(srid=2276)
objects = models.GeoManager() objects = models.GeoManager()
def __unicode__(self): return self.name def __str__(self): return self.name
# These use the GeoManager but do not have any geographic fields. # These use the GeoManager but do not have any geographic fields.
class Author(models.Model): class Author(models.Model):

View File

@ -223,4 +223,4 @@ def _ogrinspect(data_source, model_name, geom_name='geom', layer_key=0, srid=Non
if name_field: if name_field:
yield '' yield ''
yield ' def __unicode__(self): return self.%s' % name_field yield ' def __str__(self): return self.%s' % name_field

View File

@ -1,14 +1,15 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from django.conf import settings from django.conf import settings
from django.utils.encoding import force_text, StrAndUnicode from django.utils.encoding import force_text, python_2_unicode_compatible
from django.contrib.messages import constants, utils from django.contrib.messages import constants, utils
LEVEL_TAGS = utils.get_level_tags() LEVEL_TAGS = utils.get_level_tags()
class Message(StrAndUnicode): @python_2_unicode_compatible
class Message(object):
""" """
Represents an actual message that can be stored in any of the supported Represents an actual message that can be stored in any of the supported
storage classes (typically session- or cookie-based) and rendered in a view storage classes (typically session- or cookie-based) and rendered in a view
@ -35,7 +36,7 @@ class Message(StrAndUnicode):
return isinstance(other, Message) and self.level == other.level and \ return isinstance(other, Message) and self.level == other.level and \
self.message == other.message self.message == other.message
def __unicode__(self): def __str__(self):
return force_text(self.message) return force_text(self.message)
def _get_tags(self): def _get_tags(self):

View File

@ -1,7 +1,9 @@
from django.db import models from django.db import models
from django.contrib.sites.models import Site from django.contrib.sites.models import Site
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Redirect(models.Model): class Redirect(models.Model):
site = models.ForeignKey(Site) site = models.ForeignKey(Site)
old_path = models.CharField(_('redirect from'), max_length=200, db_index=True, old_path = models.CharField(_('redirect from'), max_length=200, db_index=True,
@ -16,5 +18,5 @@ class Redirect(models.Model):
unique_together=(('site', 'old_path'),) unique_together=(('site', 'old_path'),)
ordering = ('old_path',) ordering = ('old_path',)
def __unicode__(self): def __str__(self):
return "%s ---> %s" % (self.old_path, self.new_path) return "%s ---> %s" % (self.old_path, self.new_path)

View File

@ -1,5 +1,6 @@
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.utils.encoding import python_2_unicode_compatible
SITE_CACHE = {} SITE_CACHE = {}
@ -32,6 +33,7 @@ class SiteManager(models.Manager):
SITE_CACHE = {} SITE_CACHE = {}
@python_2_unicode_compatible
class Site(models.Model): class Site(models.Model):
domain = models.CharField(_('domain name'), max_length=100) domain = models.CharField(_('domain name'), max_length=100)
@ -44,7 +46,7 @@ class Site(models.Model):
verbose_name_plural = _('sites') verbose_name_plural = _('sites')
ordering = ('domain',) ordering = ('domain',)
def __unicode__(self): def __str__(self):
return self.domain return self.domain
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
@ -62,6 +64,7 @@ class Site(models.Model):
pass pass
@python_2_unicode_compatible
class RequestSite(object): class RequestSite(object):
""" """
A class that shares the primary interface of Site (i.e., it has A class that shares the primary interface of Site (i.e., it has
@ -73,7 +76,7 @@ class RequestSite(object):
def __init__(self, request): def __init__(self, request):
self.domain = self.name = request.get_host() self.domain = self.name = request.get_host()
def __unicode__(self): def __str__(self):
return self.domain return self.domain
def save(self, force_insert=False, force_update=False): def save(self, force_insert=False, force_update=False):

View File

@ -5,7 +5,9 @@ from io import BytesIO
from django.utils.encoding import smart_bytes, smart_text from django.utils.encoding import smart_bytes, smart_text
from django.core.files.utils import FileProxyMixin from django.core.files.utils import FileProxyMixin
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class File(FileProxyMixin): class File(FileProxyMixin):
DEFAULT_CHUNK_SIZE = 64 * 2**10 DEFAULT_CHUNK_SIZE = 64 * 2**10
@ -17,7 +19,7 @@ class File(FileProxyMixin):
if hasattr(file, 'mode'): if hasattr(file, 'mode'):
self.mode = file.mode self.mode = file.mode
def __unicode__(self): def __str__(self):
return smart_text(self.name or '') return smart_text(self.name or '')
def __repr__(self): def __repr__(self):
@ -121,6 +123,7 @@ class File(FileProxyMixin):
def close(self): def close(self):
self.file.close() self.file.close()
@python_2_unicode_compatible
class ContentFile(File): class ContentFile(File):
""" """
A File-like object that takes just raw content, rather than an actual file. A File-like object that takes just raw content, rather than an actual file.
@ -130,7 +133,7 @@ class ContentFile(File):
super(ContentFile, self).__init__(BytesIO(content), name=name) super(ContentFile, self).__init__(BytesIO(content), name=name)
self.size = len(content) self.size = len(content)
def __unicode__(self): def __str__(self):
return 'Raw content' return 'Raw content'
def __bool__(self): def __bool__(self):

View File

@ -10,6 +10,7 @@ from django.conf import settings
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from django.core.files.uploadedfile import TemporaryUploadedFile, InMemoryUploadedFile from django.core.files.uploadedfile import TemporaryUploadedFile, InMemoryUploadedFile
from django.utils import importlib from django.utils import importlib
from django.utils.encoding import python_2_unicode_compatible
__all__ = ['UploadFileException','StopUpload', 'SkipFile', 'FileUploadHandler', __all__ = ['UploadFileException','StopUpload', 'SkipFile', 'FileUploadHandler',
'TemporaryFileUploadHandler', 'MemoryFileUploadHandler', 'TemporaryFileUploadHandler', 'MemoryFileUploadHandler',
@ -21,6 +22,7 @@ class UploadFileException(Exception):
""" """
pass pass
@python_2_unicode_compatible
class StopUpload(UploadFileException): class StopUpload(UploadFileException):
""" """
This exception is raised when an upload must abort. This exception is raised when an upload must abort.
@ -33,7 +35,7 @@ class StopUpload(UploadFileException):
""" """
self.connection_reset = connection_reset self.connection_reset = connection_reset
def __unicode__(self): def __str__(self):
if self.connection_reset: if self.connection_reset:
return 'StopUpload: Halt current upload.' return 'StopUpload: Halt current upload.'
else: else:

View File

@ -13,6 +13,7 @@ from django.utils.translation import activate, deactivate_all, get_language, str
from django.utils.encoding import force_text, smart_text from django.utils.encoding import force_text, smart_text
from django.utils.datastructures import SortedDict from django.utils.datastructures import SortedDict
from django.utils import six from django.utils import six
from django.utils.encoding import python_2_unicode_compatible
# Calculate the verbose_name by converting from InitialCaps to "lowercase with spaces". # Calculate the verbose_name by converting from InitialCaps to "lowercase with spaces".
get_verbose_name = lambda class_name: re.sub('(((?<=[a-z])[A-Z])|([A-Z](?![A-Z]|$)))', ' \\1', class_name).lower().strip() get_verbose_name = lambda class_name: re.sub('(((?<=[a-z])[A-Z])|([A-Z](?![A-Z]|$)))', ' \\1', class_name).lower().strip()
@ -22,6 +23,7 @@ DEFAULT_NAMES = ('verbose_name', 'verbose_name_plural', 'db_table', 'ordering',
'order_with_respect_to', 'app_label', 'db_tablespace', 'order_with_respect_to', 'app_label', 'db_tablespace',
'abstract', 'managed', 'proxy', 'auto_created') 'abstract', 'managed', 'proxy', 'auto_created')
@python_2_unicode_compatible
class Options(object): class Options(object):
def __init__(self, meta, app_label=None): def __init__(self, meta, app_label=None):
self.local_fields, self.local_many_to_many = [], [] self.local_fields, self.local_many_to_many = [], []
@ -200,7 +202,7 @@ class Options(object):
def __repr__(self): def __repr__(self):
return '<Options for %s>' % self.object_name return '<Options for %s>' % self.object_name
def __unicode__(self): def __str__(self):
return "%s.%s" % (smart_text(self.app_label), smart_text(self.module_name)) return "%s.%s" % (smart_text(self.app_label), smart_text(self.module_name))
def verbose_name_raw(self): def verbose_name_raw(self):

View File

@ -12,7 +12,7 @@ from django.forms.util import flatatt, ErrorDict, ErrorList
from django.forms.widgets import Media, media_property, TextInput, Textarea from django.forms.widgets import Media, media_property, TextInput, Textarea
from django.utils.datastructures import SortedDict from django.utils.datastructures import SortedDict
from django.utils.html import conditional_escape, format_html from django.utils.html import conditional_escape, format_html
from django.utils.encoding import StrAndUnicode, smart_text, force_text from django.utils.encoding import smart_text, force_text, python_2_unicode_compatible
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.utils import six from django.utils import six
@ -68,7 +68,8 @@ class DeclarativeFieldsMetaclass(type):
new_class.media = media_property(new_class) new_class.media = media_property(new_class)
return new_class return new_class
class BaseForm(StrAndUnicode): @python_2_unicode_compatible
class BaseForm(object):
# This is the main implementation of all the Form logic. Note that this # This is the main implementation of all the Form logic. Note that this
# class is different than Form. See the comments by the Form class for more # class is different than Form. See the comments by the Form class for more
# information. Any improvements to the form API should be made to *this* # information. Any improvements to the form API should be made to *this*
@ -95,7 +96,7 @@ class BaseForm(StrAndUnicode):
# self.base_fields. # self.base_fields.
self.fields = copy.deepcopy(self.base_fields) self.fields = copy.deepcopy(self.base_fields)
def __unicode__(self): def __str__(self):
return self.as_table() return self.as_table()
def __iter__(self): def __iter__(self):
@ -387,7 +388,8 @@ class Form(six.with_metaclass(DeclarativeFieldsMetaclass, BaseForm)):
# to define a form using declarative syntax. # to define a form using declarative syntax.
# BaseForm itself has no way of designating self.fields. # BaseForm itself has no way of designating self.fields.
class BoundField(StrAndUnicode): @python_2_unicode_compatible
class BoundField(object):
"A Field plus data" "A Field plus data"
def __init__(self, form, field, name): def __init__(self, form, field, name):
self.form = form self.form = form
@ -402,7 +404,7 @@ class BoundField(StrAndUnicode):
self.label = self.field.label self.label = self.field.label
self.help_text = field.help_text or '' self.help_text = field.help_text or ''
def __unicode__(self): def __str__(self):
"""Renders this field as an HTML widget.""" """Renders this field as an HTML widget."""
if self.field.show_hidden_initial: if self.field.show_hidden_initial:
return self.as_widget() + self.as_hidden(only_initial=True) return self.as_widget() + self.as_hidden(only_initial=True)

View File

@ -5,7 +5,7 @@ from django.forms import Form
from django.forms.fields import IntegerField, BooleanField from django.forms.fields import IntegerField, BooleanField
from django.forms.util import ErrorList from django.forms.util import ErrorList
from django.forms.widgets import Media, HiddenInput from django.forms.widgets import Media, HiddenInput
from django.utils.encoding import StrAndUnicode from django.utils.encoding import python_2_unicode_compatible
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.utils import six from django.utils import six
from django.utils.six.moves import xrange from django.utils.six.moves import xrange
@ -33,7 +33,8 @@ class ManagementForm(Form):
self.base_fields[MAX_NUM_FORM_COUNT] = IntegerField(required=False, widget=HiddenInput) self.base_fields[MAX_NUM_FORM_COUNT] = IntegerField(required=False, widget=HiddenInput)
super(ManagementForm, self).__init__(*args, **kwargs) super(ManagementForm, self).__init__(*args, **kwargs)
class BaseFormSet(StrAndUnicode): @python_2_unicode_compatible
class BaseFormSet(object):
""" """
A collection of instances of the same Form class. A collection of instances of the same Form class.
""" """
@ -51,7 +52,7 @@ class BaseFormSet(StrAndUnicode):
# construct the forms in the formset # construct the forms in the formset
self._construct_forms() self._construct_forms()
def __unicode__(self): def __str__(self):
return self.as_table() return self.as_table()
def __iter__(self): def __iter__(self):

View File

@ -2,7 +2,7 @@ from __future__ import unicode_literals
from django.conf import settings from django.conf import settings
from django.utils.html import format_html, format_html_join from django.utils.html import format_html, format_html_join
from django.utils.encoding import StrAndUnicode, force_text from django.utils.encoding import force_text, python_2_unicode_compatible
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.utils import timezone from django.utils import timezone
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@ -22,13 +22,14 @@ def flatatt(attrs):
""" """
return format_html_join('', ' {0}="{1}"', attrs.items()) return format_html_join('', ' {0}="{1}"', attrs.items())
class ErrorDict(dict, StrAndUnicode): @python_2_unicode_compatible
class ErrorDict(dict):
""" """
A collection of errors that knows how to display itself in various formats. A collection of errors that knows how to display itself in various formats.
The dictionary keys are the field names, and the values are the errors. The dictionary keys are the field names, and the values are the errors.
""" """
def __unicode__(self): def __str__(self):
return self.as_ul() return self.as_ul()
def as_ul(self): def as_ul(self):
@ -42,11 +43,12 @@ class ErrorDict(dict, StrAndUnicode):
def as_text(self): def as_text(self):
return '\n'.join(['* %s\n%s' % (k, '\n'.join([' * %s' % force_text(i) for i in v])) for k, v in self.items()]) return '\n'.join(['* %s\n%s' % (k, '\n'.join([' * %s' % force_text(i) for i in v])) for k, v in self.items()])
class ErrorList(list, StrAndUnicode): @python_2_unicode_compatible
class ErrorList(list):
""" """
A collection of errors that knows how to display itself in various formats. A collection of errors that knows how to display itself in various formats.
""" """
def __unicode__(self): def __str__(self):
return self.as_ul() return self.as_ul()
def as_ul(self): def as_ul(self):

View File

@ -17,7 +17,7 @@ from django.forms.util import flatatt, to_current_timezone
from django.utils.datastructures import MultiValueDict, MergeDict from django.utils.datastructures import MultiValueDict, MergeDict
from django.utils.html import conditional_escape, format_html, format_html_join from django.utils.html import conditional_escape, format_html, format_html_join
from django.utils.translation import ugettext, ugettext_lazy from django.utils.translation import ugettext, ugettext_lazy
from django.utils.encoding import StrAndUnicode, force_text from django.utils.encoding import force_text, python_2_unicode_compatible
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.utils import six from django.utils import six
from django.utils import datetime_safe, formats from django.utils import datetime_safe, formats
@ -34,7 +34,8 @@ __all__ = (
MEDIA_TYPES = ('css','js') MEDIA_TYPES = ('css','js')
class Media(StrAndUnicode): @python_2_unicode_compatible
class Media(object):
def __init__(self, media=None, **kwargs): def __init__(self, media=None, **kwargs):
if media: if media:
media_attrs = media.__dict__ media_attrs = media.__dict__
@ -51,7 +52,7 @@ class Media(StrAndUnicode):
# if media_attrs != {}: # if media_attrs != {}:
# raise TypeError("'class Media' has invalid attribute(s): %s" % ','.join(media_attrs.keys())) # raise TypeError("'class Media' has invalid attribute(s): %s" % ','.join(media_attrs.keys()))
def __unicode__(self): def __str__(self):
return self.render() return self.render()
def render(self): def render(self):
@ -142,7 +143,8 @@ class MediaDefiningClass(type):
new_class.media = media_property(new_class) new_class.media = media_property(new_class)
return new_class return new_class
class SubWidget(StrAndUnicode): @python_2_unicode_compatible
class SubWidget(object):
""" """
Some widgets are made of multiple HTML elements -- namely, RadioSelect. Some widgets are made of multiple HTML elements -- namely, RadioSelect.
This is a class that represents the "inner" HTML element of a widget. This is a class that represents the "inner" HTML element of a widget.
@ -152,7 +154,7 @@ class SubWidget(StrAndUnicode):
self.name, self.value = name, value self.name, self.value = name, value
self.attrs, self.choices = attrs, choices self.attrs, self.choices = attrs, choices
def __unicode__(self): def __str__(self):
args = [self.name, self.value, self.attrs] args = [self.name, self.value, self.attrs]
if self.choices: if self.choices:
args.append(self.choices) args.append(self.choices)
@ -647,6 +649,7 @@ class SelectMultiple(Select):
data_set = set([force_text(value) for value in data]) data_set = set([force_text(value) for value in data])
return data_set != initial_set return data_set != initial_set
@python_2_unicode_compatible
class RadioInput(SubWidget): class RadioInput(SubWidget):
""" """
An object used by RadioFieldRenderer that represents a single An object used by RadioFieldRenderer that represents a single
@ -660,7 +663,7 @@ class RadioInput(SubWidget):
self.choice_label = force_text(choice[1]) self.choice_label = force_text(choice[1])
self.index = index self.index = index
def __unicode__(self): def __str__(self):
return self.render() return self.render()
def render(self, name=None, value=None, attrs=None, choices=()): def render(self, name=None, value=None, attrs=None, choices=()):
@ -685,7 +688,8 @@ class RadioInput(SubWidget):
final_attrs['checked'] = 'checked' final_attrs['checked'] = 'checked'
return format_html('<input{0} />', flatatt(final_attrs)) return format_html('<input{0} />', flatatt(final_attrs))
class RadioFieldRenderer(StrAndUnicode): @python_2_unicode_compatible
class RadioFieldRenderer(object):
""" """
An object used by RadioSelect to enable customization of radio widgets. An object used by RadioSelect to enable customization of radio widgets.
""" """
@ -702,7 +706,7 @@ class RadioFieldRenderer(StrAndUnicode):
choice = self.choices[idx] # Let the IndexError propogate choice = self.choices[idx] # Let the IndexError propogate
return RadioInput(self.name, self.value, self.attrs.copy(), choice, idx) return RadioInput(self.name, self.value, self.attrs.copy(), choice, idx)
def __unicode__(self): def __str__(self):
return self.render() return self.render()
def render(self): def render(self):

View File

@ -20,6 +20,7 @@ from django.utils.html import escape
from django.utils.module_loading import module_has_submodule from django.utils.module_loading import module_has_submodule
from django.utils import six from django.utils import six
from django.utils.timezone import template_localtime from django.utils.timezone import template_localtime
from django.utils.encoding import python_2_unicode_compatible
TOKEN_TEXT = 0 TOKEN_TEXT = 0
@ -79,13 +80,14 @@ class TemplateDoesNotExist(Exception):
class TemplateEncodingError(Exception): class TemplateEncodingError(Exception):
pass pass
@python_2_unicode_compatible
class VariableDoesNotExist(Exception): class VariableDoesNotExist(Exception):
def __init__(self, msg, params=()): def __init__(self, msg, params=()):
self.msg = msg self.msg = msg
self.params = params self.params = params
def __unicode__(self): def __str__(self):
return self.msg % tuple([force_text(p, errors='replace') return self.msg % tuple([force_text(p, errors='replace')
for p in self.params]) for p in self.params])

View File

@ -8,6 +8,7 @@ import re
from django.utils.encoding import force_text from django.utils.encoding import force_text
from django.utils.html_parser import HTMLParser, HTMLParseError from django.utils.html_parser import HTMLParser, HTMLParseError
from django.utils import six from django.utils import six
from django.utils.encoding import python_2_unicode_compatible
WHITESPACE = re.compile('\s+') WHITESPACE = re.compile('\s+')
@ -17,6 +18,7 @@ def normalize_whitespace(string):
return WHITESPACE.sub(' ', string) return WHITESPACE.sub(' ', string)
@python_2_unicode_compatible
class Element(object): class Element(object):
def __init__(self, name, attributes): def __init__(self, name, attributes):
self.name = name self.name = name
@ -117,7 +119,7 @@ class Element(object):
def __getitem__(self, key): def __getitem__(self, key):
return self.children[key] return self.children[key]
def __unicode__(self): def __str__(self):
output = '<%s' % self.name output = '<%s' % self.name
for key, value in self.attributes: for key, value in self.attributes:
if value: if value:
@ -136,11 +138,12 @@ class Element(object):
return six.text_type(self) return six.text_type(self)
@python_2_unicode_compatible
class RootElement(Element): class RootElement(Element):
def __init__(self): def __init__(self):
super(RootElement, self).__init__(None, ()) super(RootElement, self).__init__(None, ())
def __unicode__(self): def __str__(self):
return ''.join(six.text_type(c) for c in self.children) return ''.join(six.text_type(c) for c in self.children)

View File

@ -1,22 +1,26 @@
# coding: utf-8 # coding: utf-8
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Author(models.Model): class Author(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
age = models.IntegerField() age = models.IntegerField()
friends = models.ManyToManyField('self', blank=True) friends = models.ManyToManyField('self', blank=True)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Publisher(models.Model): class Publisher(models.Model):
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
num_awards = models.IntegerField() num_awards = models.IntegerField()
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Book(models.Model): class Book(models.Model):
isbn = models.CharField(max_length=9) isbn = models.CharField(max_length=9)
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
@ -28,15 +32,16 @@ class Book(models.Model):
publisher = models.ForeignKey(Publisher) publisher = models.ForeignKey(Publisher)
pubdate = models.DateField() pubdate = models.DateField()
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Store(models.Model): class Store(models.Model):
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
books = models.ManyToManyField(Book) books = models.ManyToManyField(Book)
original_opening = models.DateTimeField() original_opening = models.DateTimeField()
friday_night_closing = models.TimeField() friday_night_closing = models.TimeField()
def __unicode__(self): def __str__(self):
return self.name return self.name

View File

@ -5,8 +5,10 @@
This is a basic model with only two non-primary-key fields. This is a basic model with only two non-primary-key fields.
""" """
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
headline = models.CharField(max_length=100, default='Default headline') headline = models.CharField(max_length=100, default='Default headline')
pub_date = models.DateTimeField() pub_date = models.DateTimeField()
@ -14,5 +16,5 @@ class Article(models.Model):
class Meta: class Meta:
ordering = ('pub_date','headline') ordering = ('pub_date','headline')
def __unicode__(self): def __str__(self):
return self.headline return self.headline

View File

@ -10,6 +10,7 @@ field. This method returns the "human-readable" value of the field.
""" """
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
GENDER_CHOICES = ( GENDER_CHOICES = (
@ -17,9 +18,10 @@ GENDER_CHOICES = (
('F', 'Female'), ('F', 'Female'),
) )
@python_2_unicode_compatible
class Person(models.Model): class Person(models.Model):
name = models.CharField(max_length=20) name = models.CharField(max_length=20)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES) gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
def __unicode__(self): def __str__(self):
return self.name return self.name

View File

@ -18,24 +18,27 @@ from the default generated name, use the ``db_table`` parameter on the
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Author(models.Model): class Author(models.Model):
first_name = models.CharField(max_length=30, db_column='firstname') first_name = models.CharField(max_length=30, db_column='firstname')
last_name = models.CharField(max_length=30, db_column='last') last_name = models.CharField(max_length=30, db_column='last')
def __unicode__(self): def __str__(self):
return '%s %s' % (self.first_name, self.last_name) return '%s %s' % (self.first_name, self.last_name)
class Meta: class Meta:
db_table = 'my_author_table' db_table = 'my_author_table'
ordering = ('last_name','first_name') ordering = ('last_name','first_name')
@python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
headline = models.CharField(max_length=100) headline = models.CharField(max_length=100)
authors = models.ManyToManyField(Author, db_table='my_m2m_table') authors = models.ManyToManyField(Author, db_table='my_m2m_table')
def __unicode__(self): def __str__(self):
return self.headline return self.headline
class Meta: class Meta:

View File

@ -12,6 +12,7 @@ returns.
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
# An example of a custom manager called "objects". # An example of a custom manager called "objects".
@ -19,13 +20,14 @@ class PersonManager(models.Manager):
def get_fun_people(self): def get_fun_people(self):
return self.filter(fun=True) return self.filter(fun=True)
@python_2_unicode_compatible
class Person(models.Model): class Person(models.Model):
first_name = models.CharField(max_length=30) first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30)
fun = models.BooleanField() fun = models.BooleanField()
objects = PersonManager() objects = PersonManager()
def __unicode__(self): def __str__(self):
return "%s %s" % (self.first_name, self.last_name) return "%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().
@ -34,6 +36,7 @@ class PublishedBookManager(models.Manager):
def get_query_set(self): def get_query_set(self):
return super(PublishedBookManager, self).get_query_set().filter(is_published=True) return super(PublishedBookManager, self).get_query_set().filter(is_published=True)
@python_2_unicode_compatible
class Book(models.Model): class Book(models.Model):
title = models.CharField(max_length=50) title = models.CharField(max_length=50)
author = models.CharField(max_length=30) author = models.CharField(max_length=30)
@ -41,7 +44,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 __unicode__(self): def __str__(self):
return self.title return self.title
# An example of providing multiple custom managers. # An example of providing multiple custom managers.
@ -50,6 +53,7 @@ class FastCarManager(models.Manager):
def get_query_set(self): def get_query_set(self):
return super(FastCarManager, self).get_query_set().filter(top_speed__gt=150) return super(FastCarManager, self).get_query_set().filter(top_speed__gt=150)
@python_2_unicode_compatible
class Car(models.Model): class Car(models.Model):
name = models.CharField(max_length=10) name = models.CharField(max_length=10)
mileage = models.IntegerField() mileage = models.IntegerField()
@ -57,5 +61,5 @@ class Car(models.Model):
cars = models.Manager() cars = models.Manager()
fast_cars = FastCarManager() fast_cars = FastCarManager()
def __unicode__(self): def __str__(self):
return self.name return self.name

View File

@ -7,13 +7,15 @@ Any method you add to a model will be available to instances.
import datetime import datetime
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
headline = models.CharField(max_length=100) headline = models.CharField(max_length=100)
pub_date = models.DateField() pub_date = models.DateField()
def __unicode__(self): def __str__(self):
return self.headline return self.headline
def was_published_today(self): def was_published_today(self):

View File

@ -3,8 +3,10 @@ import string
from django.db import models from django.db import models
from django.utils import six from django.utils import six
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class MyWrapper(object): class MyWrapper(object):
def __init__(self, value): def __init__(self, value):
self.value = value self.value = value
@ -12,7 +14,7 @@ class MyWrapper(object):
def __repr__(self): def __repr__(self):
return "<%s: %s>" % (self.__class__.__name__, self.value) return "<%s: %s>" % (self.__class__.__name__, self.value)
def __unicode__(self): def __str__(self):
return self.value return self.value
def __eq__(self, other): def __eq__(self, other):

View File

@ -11,8 +11,10 @@ from __future__ import absolute_import, unicode_literals
from django.db import models from django.db import models
from .fields import MyAutoField from .fields import MyAutoField
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Employee(models.Model): class Employee(models.Model):
employee_code = models.IntegerField(primary_key=True, db_column = 'code') employee_code = models.IntegerField(primary_key=True, db_column = 'code')
first_name = models.CharField(max_length=20) first_name = models.CharField(max_length=20)
@ -20,22 +22,24 @@ class Employee(models.Model):
class Meta: class Meta:
ordering = ('last_name', 'first_name') ordering = ('last_name', 'first_name')
def __unicode__(self): def __str__(self):
return "%s %s" % (self.first_name, self.last_name) return "%s %s" % (self.first_name, self.last_name)
@python_2_unicode_compatible
class Business(models.Model): class Business(models.Model):
name = models.CharField(max_length=20, primary_key=True) name = models.CharField(max_length=20, primary_key=True)
employees = models.ManyToManyField(Employee) employees = models.ManyToManyField(Employee)
class Meta: class Meta:
verbose_name_plural = 'businesses' verbose_name_plural = 'businesses'
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Bar(models.Model): class Bar(models.Model):
id = MyAutoField(primary_key=True, db_index=True) id = MyAutoField(primary_key=True, db_index=True)
def __unicode__(self): def __str__(self):
return repr(self.pk) return repr(self.pk)

View File

@ -3,18 +3,20 @@ Tests for defer() and only().
""" """
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
class Secondary(models.Model): class Secondary(models.Model):
first = models.CharField(max_length=50) first = models.CharField(max_length=50)
second = models.CharField(max_length=50) second = models.CharField(max_length=50)
@python_2_unicode_compatible
class Primary(models.Model): class Primary(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
value = models.CharField(max_length=50) value = models.CharField(max_length=50)
related = models.ForeignKey(Secondary) related = models.ForeignKey(Secondary)
def __unicode__(self): def __str__(self):
return self.name return self.name
class Child(Primary): class Child(Primary):

View File

@ -1,12 +1,14 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class R(models.Model): class R(models.Model):
is_default = models.BooleanField(default=False) is_default = models.BooleanField(default=False)
def __unicode__(self): def __str__(self):
return "%s" % self.pk return "%s" % self.pk

View File

@ -1,7 +1,9 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Tag(models.Model): class Tag(models.Model):
name = models.CharField(max_length=10) name = models.CharField(max_length=10)
parent = models.ForeignKey('self', blank=True, null=True, parent = models.ForeignKey('self', blank=True, null=True,
@ -10,19 +12,21 @@ class Tag(models.Model):
class Meta: class Meta:
ordering = ['name'] ordering = ['name']
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Celebrity(models.Model): class Celebrity(models.Model):
name = models.CharField("Name", max_length=20) name = models.CharField("Name", max_length=20)
greatest_fan = models.ForeignKey("Fan", null=True, unique=True) greatest_fan = models.ForeignKey("Fan", null=True, unique=True)
def __unicode__(self): def __str__(self):
return self.name return self.name
class Fan(models.Model): class Fan(models.Model):
fan_of = models.ForeignKey(Celebrity) fan_of = models.ForeignKey(Celebrity)
@python_2_unicode_compatible
class Staff(models.Model): class Staff(models.Model):
id = models.IntegerField(primary_key=True) id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
@ -30,12 +34,13 @@ class Staff(models.Model):
tags = models.ManyToManyField(Tag, through='StaffTag') tags = models.ManyToManyField(Tag, through='StaffTag')
coworkers = models.ManyToManyField('self') coworkers = models.ManyToManyField('self')
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class StaffTag(models.Model): class StaffTag(models.Model):
staff = models.ForeignKey(Staff) staff = models.ForeignKey(Staff)
tag = models.ForeignKey(Tag) tag = models.ForeignKey(Tag)
def __unicode__(self): def __str__(self):
return "%s -> %s" % (self.tag, self.staff) return "%s -> %s" % (self.tag, self.staff)

View File

@ -4,15 +4,18 @@ Tests for F() query expression syntax.
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Employee(models.Model): class Employee(models.Model):
firstname = models.CharField(max_length=50) firstname = models.CharField(max_length=50)
lastname = models.CharField(max_length=50) lastname = models.CharField(max_length=50)
def __unicode__(self): def __str__(self):
return '%s %s' % (self.firstname, self.lastname) return '%s %s' % (self.firstname, self.lastname)
@python_2_unicode_compatible
class Company(models.Model): class Company(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
num_employees = models.PositiveIntegerField() num_employees = models.PositiveIntegerField()
@ -25,5 +28,5 @@ class Company(models.Model):
related_name='company_point_of_contact_set', related_name='company_point_of_contact_set',
null=True) null=True)
def __unicode__(self): def __str__(self):
return self.name return self.name

View File

@ -13,11 +13,13 @@ field.
from datetime import datetime from datetime import datetime
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
headline = models.CharField(max_length=100, default='Default headline') headline = models.CharField(max_length=100, default='Default headline')
pub_date = models.DateTimeField(default=datetime.now) pub_date = models.DateTimeField(default=datetime.now)
def __unicode__(self): def __str__(self):
return self.headline return self.headline

View File

@ -5,8 +5,10 @@ import json
from django.db import models from django.db import models
from django.utils.encoding import force_text from django.utils.encoding import force_text
from django.utils import six from django.utils import six
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Small(object): class Small(object):
""" """
A simple class to show that non-trivial Python objects can be used as A simple class to show that non-trivial Python objects can be used as
@ -15,7 +17,7 @@ class Small(object):
def __init__(self, first, second): def __init__(self, first, second):
self.first, self.second = first, second self.first, self.second = first, second
def __unicode__(self): def __str__(self):
return '%s%s' % (force_text(self.first), force_text(self.second)) return '%s%s' % (force_text(self.first), force_text(self.second))
class SmallField(models.Field): class SmallField(models.Field):

View File

@ -8,13 +8,15 @@ from django.db import models
from django.utils.encoding import force_text from django.utils.encoding import force_text
from .fields import SmallField, SmallerField, JSONField from .fields import SmallField, SmallerField, JSONField
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class MyModel(models.Model): class MyModel(models.Model):
name = models.CharField(max_length=10) name = models.CharField(max_length=10)
data = SmallField('small field') data = SmallField('small field')
def __unicode__(self): def __str__(self):
return force_text(self.name) return force_text(self.name)
class OtherModel(models.Model): class OtherModel(models.Model):

View File

@ -12,38 +12,43 @@ from django.contrib.auth.models import Permission
from django.contrib.contenttypes import generic from django.contrib.contenttypes import generic
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Category(models.Model): class Category(models.Model):
title = models.CharField(max_length=100) title = models.CharField(max_length=100)
description = models.TextField() description = models.TextField()
def __unicode__(self): def __str__(self):
return self.title return self.title
class Meta: class Meta:
ordering = ('title',) ordering = ('title',)
@python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
headline = models.CharField(max_length=100, default='Default headline') headline = models.CharField(max_length=100, default='Default headline')
pub_date = models.DateTimeField() pub_date = models.DateTimeField()
def __unicode__(self): def __str__(self):
return self.headline return self.headline
class Meta: class Meta:
ordering = ('-pub_date', 'headline') ordering = ('-pub_date', 'headline')
@python_2_unicode_compatible
class Blog(models.Model): class Blog(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
featured = models.ForeignKey(Article, related_name='fixtures_featured_set') featured = models.ForeignKey(Article, related_name='fixtures_featured_set')
articles = models.ManyToManyField(Article, blank=True, articles = models.ManyToManyField(Article, blank=True,
related_name='fixtures_articles_set') related_name='fixtures_articles_set')
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Tag(models.Model): class Tag(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
tagged_type = models.ForeignKey(ContentType, related_name="fixtures_tag_set") tagged_type = models.ForeignKey(ContentType, related_name="fixtures_tag_set")
@ -51,7 +56,7 @@ class Tag(models.Model):
tagged = generic.GenericForeignKey(ct_field='tagged_type', tagged = generic.GenericForeignKey(ct_field='tagged_type',
fk_field='tagged_id') fk_field='tagged_id')
def __unicode__(self): def __str__(self):
return '<%s: %s> tagged "%s"' % (self.tagged.__class__.__name__, return '<%s: %s> tagged "%s"' % (self.tagged.__class__.__name__,
self.tagged, self.name) self.tagged, self.name)
@ -59,10 +64,11 @@ class PersonManager(models.Manager):
def get_by_natural_key(self, name): def get_by_natural_key(self, name):
return self.get(name=name) return self.get(name=name)
@python_2_unicode_compatible
class Person(models.Model): class Person(models.Model):
objects = PersonManager() objects = PersonManager()
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
def __unicode__(self): def __str__(self):
return self.name return self.name
class Meta: class Meta:
@ -79,19 +85,21 @@ class Spy(Person):
objects = SpyManager() objects = SpyManager()
cover_blown = models.BooleanField(default=False) cover_blown = models.BooleanField(default=False)
@python_2_unicode_compatible
class Visa(models.Model): class Visa(models.Model):
person = models.ForeignKey(Person) person = models.ForeignKey(Person)
permissions = models.ManyToManyField(Permission, blank=True) permissions = models.ManyToManyField(Permission, blank=True)
def __unicode__(self): def __str__(self):
return '%s %s' % (self.person.name, return '%s %s' % (self.person.name,
', '.join(p.name for p in self.permissions.all())) ', '.join(p.name for p in self.permissions.all()))
@python_2_unicode_compatible
class Book(models.Model): class Book(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
authors = models.ManyToManyField(Person) authors = models.ManyToManyField(Person)
def __unicode__(self): def __str__(self):
authors = ' and '.join(a.name for a in self.authors.all()) authors = ' and '.join(a.name for a in self.authors.all())
return '%s by %s' % (self.name, authors) if authors else self.name return '%s by %s' % (self.name, authors) if authors else self.name

View File

@ -1,11 +1,13 @@
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
headline = models.CharField(max_length=100, default='Default headline') headline = models.CharField(max_length=100, default='Default headline')
pub_date = models.DateTimeField() pub_date = models.DateTimeField()
def __unicode__(self): def __str__(self):
return self.headline return self.headline
class Meta: class Meta:

View File

@ -14,8 +14,10 @@ from __future__ import unicode_literals
from django.contrib.contenttypes import generic from django.contrib.contenttypes import generic
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class TaggedItem(models.Model): class TaggedItem(models.Model):
"""A tag on an item.""" """A tag on an item."""
tag = models.SlugField() tag = models.SlugField()
@ -27,12 +29,13 @@ class TaggedItem(models.Model):
class Meta: class Meta:
ordering = ["tag", "content_type__name"] ordering = ["tag", "content_type__name"]
def __unicode__(self): def __str__(self):
return self.tag return self.tag
class ValuableTaggedItem(TaggedItem): class ValuableTaggedItem(TaggedItem):
value = models.PositiveIntegerField() value = models.PositiveIntegerField()
@python_2_unicode_compatible
class Comparison(models.Model): class Comparison(models.Model):
""" """
A model that tests having multiple GenericForeignKeys A model that tests having multiple GenericForeignKeys
@ -48,9 +51,10 @@ class Comparison(models.Model):
first_obj = generic.GenericForeignKey(ct_field="content_type1", fk_field="object_id1") first_obj = generic.GenericForeignKey(ct_field="content_type1", fk_field="object_id1")
other_obj = generic.GenericForeignKey(ct_field="content_type2", fk_field="object_id2") other_obj = generic.GenericForeignKey(ct_field="content_type2", fk_field="object_id2")
def __unicode__(self): def __str__(self):
return "%s is %s than %s" % (self.first_obj, self.comparative, self.other_obj) return "%s is %s than %s" % (self.first_obj, self.comparative, self.other_obj)
@python_2_unicode_compatible
class Animal(models.Model): class Animal(models.Model):
common_name = models.CharField(max_length=150) common_name = models.CharField(max_length=150)
latin_name = models.CharField(max_length=150) latin_name = models.CharField(max_length=150)
@ -60,25 +64,27 @@ class Animal(models.Model):
object_id_field="object_id1", object_id_field="object_id1",
content_type_field="content_type1") content_type_field="content_type1")
def __unicode__(self): def __str__(self):
return self.common_name return self.common_name
@python_2_unicode_compatible
class Vegetable(models.Model): class Vegetable(models.Model):
name = models.CharField(max_length=150) name = models.CharField(max_length=150)
is_yucky = models.BooleanField(default=True) is_yucky = models.BooleanField(default=True)
tags = generic.GenericRelation(TaggedItem) tags = generic.GenericRelation(TaggedItem)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Mineral(models.Model): class Mineral(models.Model):
name = models.CharField(max_length=150) name = models.CharField(max_length=150)
hardness = models.PositiveSmallIntegerField() hardness = models.PositiveSmallIntegerField()
# note the lack of an explicit GenericRelation here... # note the lack of an explicit GenericRelation here...
def __unicode__(self): def __str__(self):
return self.name return self.name
class GeckoManager(models.Manager): class GeckoManager(models.Manager):

View File

@ -9,8 +9,10 @@ farthest into the future."
""" """
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
headline = models.CharField(max_length=100) headline = models.CharField(max_length=100)
pub_date = models.DateField() pub_date = models.DateField()
@ -18,14 +20,15 @@ class Article(models.Model):
class Meta: class Meta:
get_latest_by = 'pub_date' get_latest_by = 'pub_date'
def __unicode__(self): def __str__(self):
return self.headline return self.headline
@python_2_unicode_compatible
class Person(models.Model): class Person(models.Model):
name = models.CharField(max_length=30) name = models.CharField(max_length=30)
birthday = models.DateField() birthday = models.DateField()
# Note that this model doesn't have "get_latest_by" set. # Note that this model doesn't have "get_latest_by" set.
def __unicode__(self): def __str__(self):
return self.name return self.name

View File

@ -11,23 +11,26 @@ performing a ``filter()`` lookup and raising a ``Http404`` exception if a
""" """
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Author(models.Model): class Author(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
def __unicode__(self): def __str__(self):
return self.name return self.name
class ArticleManager(models.Manager): class ArticleManager(models.Manager):
def get_query_set(self): def get_query_set(self):
return super(ArticleManager, self).get_query_set().filter(authors__name__icontains='sir') return super(ArticleManager, self).get_query_set().filter(authors__name__icontains='sir')
@python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
authors = models.ManyToManyField(Author) authors = models.ManyToManyField(Author)
title = models.CharField(max_length=50) title = models.CharField(max_length=50)
objects = models.Manager() objects = models.Manager()
by_a_sir = ArticleManager() by_a_sir = ArticleManager()
def __unicode__(self): def __str__(self):
return self.title return self.title

View File

@ -9,14 +9,16 @@ parameters.
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Person(models.Model): class Person(models.Model):
first_name = models.CharField(max_length=100) first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100) last_name = models.CharField(max_length=100)
birthday = models.DateField() birthday = models.DateField()
def __unicode__(self): def __str__(self):
return '%s %s' % (self.first_name, self.last_name) return '%s %s' % (self.first_name, self.last_name)
class ManualPrimaryKeyTest(models.Model): class ManualPrimaryKeyTest(models.Model):

View File

@ -8,6 +8,7 @@ from __future__ import unicode_literals
from django.db import models from django.db import models
from django.utils import six from django.utils import six
from django.utils.encoding import python_2_unicode_compatible
class Author(models.Model): class Author(models.Model):
@ -15,6 +16,7 @@ class Author(models.Model):
class Meta: class Meta:
ordering = ('name', ) ordering = ('name', )
@python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
headline = models.CharField(max_length=100) headline = models.CharField(max_length=100)
pub_date = models.DateTimeField() pub_date = models.DateTimeField()
@ -22,7 +24,7 @@ class Article(models.Model):
class Meta: class Meta:
ordering = ('-pub_date', 'headline') ordering = ('-pub_date', 'headline')
def __unicode__(self): def __str__(self):
return self.headline return self.headline
class Tag(models.Model): class Tag(models.Model):
@ -31,24 +33,27 @@ class Tag(models.Model):
class Meta: class Meta:
ordering = ('name', ) ordering = ('name', )
@python_2_unicode_compatible
class Season(models.Model): class Season(models.Model):
year = models.PositiveSmallIntegerField() year = models.PositiveSmallIntegerField()
gt = models.IntegerField(null=True, blank=True) gt = models.IntegerField(null=True, blank=True)
def __unicode__(self): def __str__(self):
return six.text_type(self.year) return six.text_type(self.year)
@python_2_unicode_compatible
class Game(models.Model): class Game(models.Model):
season = models.ForeignKey(Season, related_name='games') season = models.ForeignKey(Season, related_name='games')
home = models.CharField(max_length=100) home = models.CharField(max_length=100)
away = models.CharField(max_length=100) away = models.CharField(max_length=100)
def __unicode__(self): def __str__(self):
return "%s at %s" % (self.away, self.home) return "%s at %s" % (self.away, self.home)
@python_2_unicode_compatible
class Player(models.Model): class Player(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
games = models.ManyToManyField(Game, related_name='players') games = models.ManyToManyField(Game, related_name='players')
def __unicode__(self): def __str__(self):
return self.name return self.name

View File

@ -7,17 +7,19 @@ from __future__ import unicode_literals
from django.db import models from django.db import models
from django.utils import six from django.utils import six
from django.utils.encoding import python_2_unicode_compatible
class User(models.Model): class User(models.Model):
username = models.CharField(max_length=20) username = models.CharField(max_length=20)
@python_2_unicode_compatible
class Issue(models.Model): class Issue(models.Model):
num = models.IntegerField() num = models.IntegerField()
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 __unicode__(self): def __str__(self):
return six.text_type(self.num) return six.text_type(self.num)
class Meta: class Meta:

View File

@ -12,27 +12,31 @@ field, which specifies the ``Reporter``'s position for the given article
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Reporter(models.Model): class Reporter(models.Model):
first_name = models.CharField(max_length=30) first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30)
def __unicode__(self): def __str__(self):
return "%s %s" % (self.first_name, self.last_name) return "%s %s" % (self.first_name, self.last_name)
@python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
headline = models.CharField(max_length=100) headline = models.CharField(max_length=100)
pub_date = models.DateField() pub_date = models.DateField()
def __unicode__(self): def __str__(self):
return self.headline return self.headline
@python_2_unicode_compatible
class Writer(models.Model): class Writer(models.Model):
reporter = models.ForeignKey(Reporter) reporter = models.ForeignKey(Reporter)
article = models.ForeignKey(Article) article = models.ForeignKey(Article)
position = models.CharField(max_length=100) position = models.CharField(max_length=100)
def __unicode__(self): def __str__(self):
return '%s (%s)' % (self.reporter, self.position) return '%s (%s)' % (self.reporter, self.position)

View File

@ -8,16 +8,19 @@ Set ``related_name`` to designate what the reverse relationship is called.
""" """
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Category(models.Model): class Category(models.Model):
name = models.CharField(max_length=20) name = models.CharField(max_length=20)
class Meta: class Meta:
ordering = ('name',) ordering = ('name',)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
headline = models.CharField(max_length=50) headline = models.CharField(max_length=50)
pub_date = models.DateTimeField() pub_date = models.DateTimeField()
@ -26,6 +29,6 @@ class Article(models.Model):
class Meta: class Meta:
ordering = ('pub_date',) ordering = ('pub_date',)
def __unicode__(self): def __str__(self):
return self.headline return self.headline

View File

@ -17,12 +17,14 @@ appropriate.
""" """
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Person(models.Model): class Person(models.Model):
name = models.CharField(max_length=20) name = models.CharField(max_length=20)
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 __unicode__(self): def __str__(self):
return self.name return self.name

View File

@ -1,15 +1,18 @@
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Part(models.Model): class Part(models.Model):
name = models.CharField(max_length=20) name = models.CharField(max_length=20)
class Meta: class Meta:
ordering = ('name',) ordering = ('name',)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Car(models.Model): class Car(models.Model):
name = models.CharField(max_length=20) name = models.CharField(max_length=20)
default_parts = models.ManyToManyField(Part) default_parts = models.ManyToManyField(Part)
@ -18,12 +21,13 @@ class Car(models.Model):
class Meta: class Meta:
ordering = ('name',) ordering = ('name',)
def __unicode__(self): def __str__(self):
return self.name return self.name
class SportsCar(Car): class SportsCar(Car):
price = models.IntegerField() price = models.IntegerField()
@python_2_unicode_compatible
class Person(models.Model): class Person(models.Model):
name = models.CharField(max_length=20) name = models.CharField(max_length=20)
fans = models.ManyToManyField('self', related_name='idols', symmetrical=False) fans = models.ManyToManyField('self', related_name='idols', symmetrical=False)
@ -32,5 +36,5 @@ class Person(models.Model):
class Meta: class Meta:
ordering = ('name',) ordering = ('name',)
def __unicode__(self): def __str__(self):
return self.name return self.name

View File

@ -1,18 +1,21 @@
from datetime import datetime from datetime import datetime
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
# M2M described on one of the models # M2M described on one of the models
@python_2_unicode_compatible
class Person(models.Model): class Person(models.Model):
name = models.CharField(max_length=128) name = models.CharField(max_length=128)
class Meta: class Meta:
ordering = ('name',) ordering = ('name',)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Group(models.Model): class Group(models.Model):
name = models.CharField(max_length=128) name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership') members = models.ManyToManyField(Person, through='Membership')
@ -22,9 +25,10 @@ class Group(models.Model):
class Meta: class Meta:
ordering = ('name',) ordering = ('name',)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Membership(models.Model): class Membership(models.Model):
person = models.ForeignKey(Person) person = models.ForeignKey(Person)
group = models.ForeignKey(Group) group = models.ForeignKey(Group)
@ -34,16 +38,17 @@ class Membership(models.Model):
class Meta: class Meta:
ordering = ('date_joined', 'invite_reason', 'group') ordering = ('date_joined', 'invite_reason', 'group')
def __unicode__(self): def __str__(self):
return "%s is a member of %s" % (self.person.name, self.group.name) return "%s is a member of %s" % (self.person.name, self.group.name)
@python_2_unicode_compatible
class CustomMembership(models.Model): class CustomMembership(models.Model):
person = models.ForeignKey(Person, db_column="custom_person_column", related_name="custom_person_related_name") person = models.ForeignKey(Person, db_column="custom_person_column", related_name="custom_person_related_name")
group = models.ForeignKey(Group) group = models.ForeignKey(Group)
weird_fk = models.ForeignKey(Membership, null=True) weird_fk = models.ForeignKey(Membership, null=True)
date_joined = models.DateTimeField(default=datetime.now) date_joined = models.DateTimeField(default=datetime.now)
def __unicode__(self): def __str__(self):
return "%s is a member of %s" % (self.person.name, self.group.name) return "%s is a member of %s" % (self.person.name, self.group.name)
class Meta: class Meta:
@ -54,11 +59,12 @@ class TestNoDefaultsOrNulls(models.Model):
group = models.ForeignKey(Group) group = models.ForeignKey(Group)
nodefaultnonull = models.CharField(max_length=5) nodefaultnonull = models.CharField(max_length=5)
@python_2_unicode_compatible
class PersonSelfRefM2M(models.Model): class PersonSelfRefM2M(models.Model):
name = models.CharField(max_length=5) name = models.CharField(max_length=5)
friends = models.ManyToManyField('self', through="Friendship", symmetrical=False) friends = models.ManyToManyField('self', through="Friendship", symmetrical=False)
def __unicode__(self): def __str__(self):
return self.name return self.name
class Friendship(models.Model): class Friendship(models.Model):

View File

@ -11,19 +11,22 @@ Set ``related_name`` to designate what the reverse relationship is called.
""" """
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Category(models.Model): class Category(models.Model):
name = models.CharField(max_length=20) name = models.CharField(max_length=20)
parent = models.ForeignKey('self', blank=True, null=True, related_name='child_set') parent = models.ForeignKey('self', blank=True, null=True, related_name='child_set')
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Person(models.Model): class Person(models.Model):
full_name = models.CharField(max_length=20) full_name = models.CharField(max_length=20)
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 __unicode__(self): def __str__(self):
return self.full_name return self.full_name

View File

@ -8,22 +8,25 @@ objects, and a ``Publication`` has multiple ``Article`` objects.
""" """
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Publication(models.Model): class Publication(models.Model):
title = models.CharField(max_length=30) title = models.CharField(max_length=30)
def __unicode__(self): def __str__(self):
return self.title return self.title
class Meta: class Meta:
ordering = ('title',) ordering = ('title',)
@python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
headline = models.CharField(max_length=100) headline = models.CharField(max_length=100)
publications = models.ManyToManyField(Publication) publications = models.ManyToManyField(Publication)
def __unicode__(self): def __str__(self):
return self.headline return self.headline
class Meta: class Meta:

View File

@ -6,22 +6,25 @@ To define a many-to-one relationship, use ``ForeignKey()``.
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Reporter(models.Model): class Reporter(models.Model):
first_name = models.CharField(max_length=30) first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30)
email = models.EmailField() email = models.EmailField()
def __unicode__(self): def __str__(self):
return "%s %s" % (self.first_name, self.last_name) return "%s %s" % (self.first_name, self.last_name)
@python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
headline = models.CharField(max_length=100) headline = models.CharField(max_length=100)
pub_date = models.DateField() pub_date = models.DateField()
reporter = models.ForeignKey(Reporter) reporter = models.ForeignKey(Reporter)
def __unicode__(self): def __str__(self):
return self.headline return self.headline
class Meta: class Meta:

View File

@ -6,14 +6,17 @@ To define a many-to-one relationship that can have a null foreign key, use
""" """
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Reporter(models.Model): class Reporter(models.Model):
name = models.CharField(max_length=30) name = models.CharField(max_length=30)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
headline = models.CharField(max_length=100) headline = models.CharField(max_length=100)
reporter = models.ForeignKey(Reporter, null=True) reporter = models.ForeignKey(Reporter, null=True)
@ -21,5 +24,5 @@ class Article(models.Model):
class Meta: class Meta:
ordering = ('headline',) ordering = ('headline',)
def __unicode__(self): def __str__(self):
return self.headline return self.headline

View File

@ -14,6 +14,7 @@ import tempfile
from django.core.files.storage import FileSystemStorage from django.core.files.storage import FileSystemStorage
from django.db import models from django.db import models
from django.utils import six from django.utils import six
from django.utils.encoding import python_2_unicode_compatible
temp_storage_dir = tempfile.mkdtemp(dir=os.environ['DJANGO_TEST_TEMP_DIR']) temp_storage_dir = tempfile.mkdtemp(dir=os.environ['DJANGO_TEST_TEMP_DIR'])
@ -31,23 +32,26 @@ ARTICLE_STATUS_CHAR = (
('l', 'Live'), ('l', 'Live'),
) )
@python_2_unicode_compatible
class Category(models.Model): class Category(models.Model):
name = models.CharField(max_length=20) name = models.CharField(max_length=20)
slug = models.SlugField(max_length=20) slug = models.SlugField(max_length=20)
url = models.CharField('The URL', max_length=40) url = models.CharField('The URL', max_length=40)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Writer(models.Model): class Writer(models.Model):
name = models.CharField(max_length=50, help_text='Use both first and last names.') name = models.CharField(max_length=50, help_text='Use both first and last names.')
class Meta: class Meta:
ordering = ('name',) ordering = ('name',)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
headline = models.CharField(max_length=50) headline = models.CharField(max_length=50)
slug = models.SlugField() slug = models.SlugField()
@ -64,7 +68,7 @@ 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 __unicode__(self): def __str__(self):
return self.headline return self.headline
class ImprovedArticle(models.Model): class ImprovedArticle(models.Model):
@ -76,26 +80,29 @@ class ImprovedArticleWithParentLink(models.Model):
class BetterWriter(Writer): class BetterWriter(Writer):
score = models.IntegerField() score = models.IntegerField()
@python_2_unicode_compatible
class WriterProfile(models.Model): class WriterProfile(models.Model):
writer = models.OneToOneField(Writer, primary_key=True) writer = models.OneToOneField(Writer, primary_key=True)
age = models.PositiveIntegerField() age = models.PositiveIntegerField()
def __unicode__(self): def __str__(self):
return "%s is %s" % (self.writer, self.age) return "%s is %s" % (self.writer, self.age)
from django.contrib.localflavor.us.models import PhoneNumberField from django.contrib.localflavor.us.models import PhoneNumberField
@python_2_unicode_compatible
class PhoneNumber(models.Model): class PhoneNumber(models.Model):
phone = PhoneNumberField() phone = PhoneNumberField()
description = models.CharField(max_length=20) description = models.CharField(max_length=20)
def __unicode__(self): def __str__(self):
return self.phone return self.phone
@python_2_unicode_compatible
class TextFile(models.Model): class TextFile(models.Model):
description = models.CharField(max_length=20) description = models.CharField(max_length=20)
file = models.FileField(storage=temp_storage, upload_to='tests', max_length=15) file = models.FileField(storage=temp_storage, upload_to='tests', max_length=15)
def __unicode__(self): def __str__(self):
return self.description return self.description
try: try:
@ -110,6 +117,7 @@ try:
test_images = True test_images = True
@python_2_unicode_compatible
class ImageFile(models.Model): class ImageFile(models.Model):
def custom_upload_path(self, filename): def custom_upload_path(self, filename):
path = self.path or 'tests' path = self.path or 'tests'
@ -125,9 +133,10 @@ try:
width_field='width', height_field='height') width_field='width', height_field='height')
path = models.CharField(max_length=16, blank=True, default='') path = models.CharField(max_length=16, blank=True, default='')
def __unicode__(self): def __str__(self):
return self.description return self.description
@python_2_unicode_compatible
class OptionalImageFile(models.Model): class OptionalImageFile(models.Model):
def custom_upload_path(self, filename): def custom_upload_path(self, filename):
path = self.path or 'tests' path = self.path or 'tests'
@ -141,28 +150,31 @@ try:
height = models.IntegerField(editable=False, null=True) height = models.IntegerField(editable=False, null=True)
path = models.CharField(max_length=16, blank=True, default='') path = models.CharField(max_length=16, blank=True, default='')
def __unicode__(self): def __str__(self):
return self.description return self.description
except ImportError: except ImportError:
test_images = False test_images = False
@python_2_unicode_compatible
class CommaSeparatedInteger(models.Model): class CommaSeparatedInteger(models.Model):
field = models.CommaSeparatedIntegerField(max_length=20) field = models.CommaSeparatedIntegerField(max_length=20)
def __unicode__(self): def __str__(self):
return self.field return self.field
@python_2_unicode_compatible
class Product(models.Model): class Product(models.Model):
slug = models.SlugField(unique=True) slug = models.SlugField(unique=True)
def __unicode__(self): def __str__(self):
return self.slug return self.slug
@python_2_unicode_compatible
class Price(models.Model): class Price(models.Model):
price = models.DecimalField(max_digits=10, decimal_places=2) price = models.DecimalField(max_digits=10, decimal_places=2)
quantity = models.PositiveIntegerField() quantity = models.PositiveIntegerField()
def __unicode__(self): def __str__(self):
return "%s for %s" % (self.quantity, self.price) return "%s for %s" % (self.quantity, self.price)
class Meta: class Meta:
@ -171,6 +183,7 @@ class Price(models.Model):
class ArticleStatus(models.Model): class ArticleStatus(models.Model):
status = models.CharField(max_length=2, choices=ARTICLE_STATUS_CHAR, blank=True, null=True) status = models.CharField(max_length=2, choices=ARTICLE_STATUS_CHAR, blank=True, null=True)
@python_2_unicode_compatible
class Inventory(models.Model): class Inventory(models.Model):
barcode = models.PositiveIntegerField(unique=True) barcode = models.PositiveIntegerField(unique=True)
parent = models.ForeignKey('self', to_field='barcode', blank=True, null=True) parent = models.ForeignKey('self', to_field='barcode', blank=True, null=True)
@ -179,7 +192,7 @@ class Inventory(models.Model):
class Meta: class Meta:
ordering = ('name',) ordering = ('name',)
def __unicode__(self): def __str__(self):
return self.name return self.name
class Book(models.Model): class Book(models.Model):
@ -202,31 +215,34 @@ class BookXtra(models.Model):
class DerivedBook(Book, BookXtra): class DerivedBook(Book, BookXtra):
pass pass
@python_2_unicode_compatible
class ExplicitPK(models.Model): class ExplicitPK(models.Model):
key = models.CharField(max_length=20, primary_key=True) key = models.CharField(max_length=20, primary_key=True)
desc = models.CharField(max_length=20, blank=True, unique=True) desc = models.CharField(max_length=20, blank=True, unique=True)
class Meta: class Meta:
unique_together = ('key', 'desc') unique_together = ('key', 'desc')
def __unicode__(self): def __str__(self):
return self.key return self.key
@python_2_unicode_compatible
class Post(models.Model): class Post(models.Model):
title = models.CharField(max_length=50, unique_for_date='posted', blank=True) title = models.CharField(max_length=50, unique_for_date='posted', blank=True)
slug = models.CharField(max_length=50, unique_for_year='posted', blank=True) slug = models.CharField(max_length=50, unique_for_year='posted', blank=True)
subtitle = models.CharField(max_length=50, unique_for_month='posted', blank=True) subtitle = models.CharField(max_length=50, unique_for_month='posted', blank=True)
posted = models.DateField() posted = models.DateField()
def __unicode__(self): def __str__(self):
return self.name return self.name
class DerivedPost(Post): class DerivedPost(Post):
pass pass
@python_2_unicode_compatible
class BigInt(models.Model): class BigInt(models.Model):
biggie = models.BigIntegerField() biggie = models.BigIntegerField()
def __unicode__(self): def __str__(self):
return six.text_type(self.biggie) return six.text_type(self.biggie)
class MarkupField(models.CharField): class MarkupField(models.CharField):

View File

@ -4,20 +4,23 @@ import datetime
from django.db import models from django.db import models
from django.utils import six from django.utils import six
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Author(models.Model): class Author(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
class Meta: class Meta:
ordering = ('name',) ordering = ('name',)
def __unicode__(self): def __str__(self):
return self.name return self.name
class BetterAuthor(Author): class BetterAuthor(Author):
write_speed = models.IntegerField() write_speed = models.IntegerField()
@python_2_unicode_compatible
class Book(models.Model): class Book(models.Model):
author = models.ForeignKey(Author) author = models.ForeignKey(Author)
title = models.CharField(max_length=100) title = models.CharField(max_length=100)
@ -28,20 +31,22 @@ class Book(models.Model):
) )
ordering = ['id'] ordering = ['id']
def __unicode__(self): def __str__(self):
return self.title return self.title
@python_2_unicode_compatible
class BookWithCustomPK(models.Model): class BookWithCustomPK(models.Model):
my_pk = models.DecimalField(max_digits=5, decimal_places=0, primary_key=True) my_pk = models.DecimalField(max_digits=5, decimal_places=0, primary_key=True)
author = models.ForeignKey(Author) author = models.ForeignKey(Author)
title = models.CharField(max_length=100) title = models.CharField(max_length=100)
def __unicode__(self): def __str__(self):
return '%s: %s' % (self.my_pk, self.title) return '%s: %s' % (self.my_pk, self.title)
class Editor(models.Model): class Editor(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
@python_2_unicode_compatible
class BookWithOptionalAltEditor(models.Model): class BookWithOptionalAltEditor(models.Model):
author = models.ForeignKey(Author) author = models.ForeignKey(Author)
# Optional secondary author # Optional secondary author
@ -53,21 +58,23 @@ class BookWithOptionalAltEditor(models.Model):
('author', 'title', 'alt_editor'), ('author', 'title', 'alt_editor'),
) )
def __unicode__(self): def __str__(self):
return self.title return self.title
@python_2_unicode_compatible
class AlternateBook(Book): class AlternateBook(Book):
notes = models.CharField(max_length=100) notes = models.CharField(max_length=100)
def __unicode__(self): def __str__(self):
return '%s - %s' % (self.title, self.notes) return '%s - %s' % (self.title, self.notes)
@python_2_unicode_compatible
class AuthorMeeting(models.Model): class AuthorMeeting(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
authors = models.ManyToManyField(Author) authors = models.ManyToManyField(Author)
created = models.DateField(editable=False) created = models.DateField(editable=False)
def __unicode__(self): def __str__(self):
return self.name return self.name
class CustomPrimaryKey(models.Model): class CustomPrimaryKey(models.Model):
@ -77,19 +84,21 @@ class CustomPrimaryKey(models.Model):
# models for inheritance tests. # models for inheritance tests.
@python_2_unicode_compatible
class Place(models.Model): class Place(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
city = models.CharField(max_length=50) city = models.CharField(max_length=50)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Owner(models.Model): class Owner(models.Model):
auto_id = models.AutoField(primary_key=True) auto_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
place = models.ForeignKey(Place) place = models.ForeignKey(Place)
def __unicode__(self): def __str__(self):
return "%s at %s" % (self.name, self.place) return "%s at %s" % (self.name, self.place)
class Location(models.Model): class Location(models.Model):
@ -98,30 +107,34 @@ class Location(models.Model):
lat = models.CharField(max_length=100) lat = models.CharField(max_length=100)
lon = models.CharField(max_length=100) lon = models.CharField(max_length=100)
@python_2_unicode_compatible
class OwnerProfile(models.Model): class OwnerProfile(models.Model):
owner = models.OneToOneField(Owner, primary_key=True) owner = models.OneToOneField(Owner, primary_key=True)
age = models.PositiveIntegerField() age = models.PositiveIntegerField()
def __unicode__(self): def __str__(self):
return "%s is %d" % (self.owner.name, self.age) return "%s is %d" % (self.owner.name, self.age)
@python_2_unicode_compatible
class Restaurant(Place): class Restaurant(Place):
serves_pizza = models.BooleanField() serves_pizza = models.BooleanField()
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Product(models.Model): class Product(models.Model):
slug = models.SlugField(unique=True) slug = models.SlugField(unique=True)
def __unicode__(self): def __str__(self):
return self.slug return self.slug
@python_2_unicode_compatible
class Price(models.Model): class Price(models.Model):
price = models.DecimalField(max_digits=10, decimal_places=2) price = models.DecimalField(max_digits=10, decimal_places=2)
quantity = models.PositiveIntegerField() quantity = models.PositiveIntegerField()
def __unicode__(self): def __str__(self):
return "%s for %s" % (self.quantity, self.price) return "%s for %s" % (self.quantity, self.price)
class Meta: class Meta:
@ -136,12 +149,14 @@ class ClassyMexicanRestaurant(MexicanRestaurant):
# models for testing unique_together validation when a fk is involved and # models for testing unique_together validation when a fk is involved and
# using inlineformset_factory. # using inlineformset_factory.
@python_2_unicode_compatible
class Repository(models.Model): class Repository(models.Model):
name = models.CharField(max_length=25) name = models.CharField(max_length=25)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Revision(models.Model): class Revision(models.Model):
repository = models.ForeignKey(Repository) repository = models.ForeignKey(Repository)
revision = models.CharField(max_length=40) revision = models.CharField(max_length=40)
@ -149,7 +164,7 @@ class Revision(models.Model):
class Meta: class Meta:
unique_together = (("repository", "revision"),) unique_together = (("repository", "revision"),)
def __unicode__(self): def __str__(self):
return "%s (%s)" % (self.revision, six.text_type(self.repository)) return "%s (%s)" % (self.revision, six.text_type(self.repository))
# models for testing callable defaults (see bug #7975). If you define a model # models for testing callable defaults (see bug #7975). If you define a model
@ -167,32 +182,36 @@ class Membership(models.Model):
class Team(models.Model): class Team(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
@python_2_unicode_compatible
class Player(models.Model): class Player(models.Model):
team = models.ForeignKey(Team, null=True) team = models.ForeignKey(Team, null=True)
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
def __unicode__(self): def __str__(self):
return self.name return self.name
# Models for testing custom ModelForm save methods in formsets and inline formsets # Models for testing custom ModelForm save methods in formsets and inline formsets
@python_2_unicode_compatible
class Poet(models.Model): class Poet(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Poem(models.Model): class Poem(models.Model):
poet = models.ForeignKey(Poet) poet = models.ForeignKey(Poet)
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Post(models.Model): class Post(models.Model):
title = models.CharField(max_length=50, unique_for_date='posted', blank=True) title = models.CharField(max_length=50, unique_for_date='posted', blank=True)
slug = models.CharField(max_length=50, unique_for_year='posted', blank=True) slug = models.CharField(max_length=50, unique_for_year='posted', blank=True)
subtitle = models.CharField(max_length=50, unique_for_month='posted', blank=True) subtitle = models.CharField(max_length=50, unique_for_month='posted', blank=True)
posted = models.DateField() posted = models.DateField()
def __unicode__(self): def __str__(self):
return self.name return self.name

View File

@ -14,11 +14,13 @@ Both styles are demonstrated here.
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
# #
# Abstract base classes # Abstract base classes
# #
@python_2_unicode_compatible
class CommonInfo(models.Model): class CommonInfo(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
age = models.PositiveIntegerField() age = models.PositiveIntegerField()
@ -27,7 +29,7 @@ class CommonInfo(models.Model):
abstract = True abstract = True
ordering = ['name'] ordering = ['name']
def __unicode__(self): def __str__(self):
return '%s %s' % (self.__class__.__name__, self.name) return '%s %s' % (self.__class__.__name__, self.name)
class Worker(CommonInfo): class Worker(CommonInfo):
@ -49,6 +51,7 @@ class StudentWorker(Student, Worker):
class Post(models.Model): class Post(models.Model):
title = models.CharField(max_length=50) title = models.CharField(max_length=50)
@python_2_unicode_compatible
class Attachment(models.Model): class Attachment(models.Model):
post = models.ForeignKey(Post, related_name='attached_%(class)s_set') post = models.ForeignKey(Post, related_name='attached_%(class)s_set')
content = models.TextField() content = models.TextField()
@ -56,7 +59,7 @@ class Attachment(models.Model):
class Meta: class Meta:
abstract = True abstract = True
def __unicode__(self): def __str__(self):
return self.content return self.content
class Comment(Attachment): class Comment(Attachment):
@ -69,17 +72,19 @@ class Link(Attachment):
# Multi-table inheritance # Multi-table inheritance
# #
@python_2_unicode_compatible
class Chef(models.Model): class Chef(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
def __unicode__(self): def __str__(self):
return "%s the chef" % self.name return "%s the chef" % self.name
@python_2_unicode_compatible
class Place(models.Model): class Place(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
address = models.CharField(max_length=80) address = models.CharField(max_length=80)
def __unicode__(self): def __str__(self):
return "%s the place" % self.name return "%s the place" % self.name
class Rating(models.Model): class Rating(models.Model):
@ -89,6 +94,7 @@ class Rating(models.Model):
abstract = True abstract = True
ordering = ['-rating'] ordering = ['-rating']
@python_2_unicode_compatible
class Restaurant(Place, Rating): class Restaurant(Place, Rating):
serves_hot_dogs = models.BooleanField() serves_hot_dogs = models.BooleanField()
serves_pizza = models.BooleanField() serves_pizza = models.BooleanField()
@ -97,27 +103,30 @@ class Restaurant(Place, Rating):
class Meta(Rating.Meta): class Meta(Rating.Meta):
db_table = 'my_restaurant' db_table = 'my_restaurant'
def __unicode__(self): def __str__(self):
return "%s the restaurant" % self.name return "%s the restaurant" % self.name
@python_2_unicode_compatible
class ItalianRestaurant(Restaurant): class ItalianRestaurant(Restaurant):
serves_gnocchi = models.BooleanField() serves_gnocchi = models.BooleanField()
def __unicode__(self): def __str__(self):
return "%s the italian restaurant" % self.name return "%s the italian restaurant" % self.name
@python_2_unicode_compatible
class Supplier(Place): class Supplier(Place):
customers = models.ManyToManyField(Restaurant, related_name='provider') customers = models.ManyToManyField(Restaurant, related_name='provider')
def __unicode__(self): def __str__(self):
return "%s the supplier" % self.name return "%s the supplier" % self.name
@python_2_unicode_compatible
class ParkingLot(Place): class ParkingLot(Place):
# An explicit link to the parent (we can control the attribute name). # An explicit link to the parent (we can control the attribute name).
parent = models.OneToOneField(Place, primary_key=True, parent_link=True) parent = models.OneToOneField(Place, primary_key=True, parent_link=True)
main_site = models.ForeignKey(Place, related_name='lot') main_site = models.ForeignKey(Place, related_name='lot')
def __unicode__(self): def __str__(self):
return "%s the parking lot" % self.name return "%s the parking lot" % self.name
# #
@ -139,10 +148,11 @@ class NamedURL(models.Model):
class Meta: class Meta:
abstract = True abstract = True
@python_2_unicode_compatible
class Copy(NamedURL): class Copy(NamedURL):
content = models.TextField() content = models.TextField()
def __unicode__(self): def __str__(self):
return self.content return self.content
class Mixin(object): class Mixin(object):

View File

@ -11,12 +11,14 @@ from __future__ import absolute_import
from django.db import models from django.db import models
from ..model_inheritance.models import NamedURL from ..model_inheritance.models import NamedURL
from django.utils.encoding import python_2_unicode_compatible
# #
# Abstract base classes with related models # Abstract base classes with related models
# #
@python_2_unicode_compatible
class Copy(NamedURL): class Copy(NamedURL):
content = models.TextField() content = models.TextField()
def __unicode__(self): def __str__(self):
return self.content return self.content

View File

@ -8,28 +8,32 @@ In this example, a ``Place`` optionally can be a ``Restaurant``.
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Place(models.Model): class Place(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
address = models.CharField(max_length=80) address = models.CharField(max_length=80)
def __unicode__(self): def __str__(self):
return "%s the place" % self.name return "%s the place" % self.name
@python_2_unicode_compatible
class Restaurant(models.Model): class Restaurant(models.Model):
place = models.OneToOneField(Place, primary_key=True) place = models.OneToOneField(Place, primary_key=True)
serves_hot_dogs = models.BooleanField() serves_hot_dogs = models.BooleanField()
serves_pizza = models.BooleanField() serves_pizza = models.BooleanField()
def __unicode__(self): def __str__(self):
return "%s the restaurant" % self.place.name return "%s the restaurant" % self.place.name
@python_2_unicode_compatible
class Waiter(models.Model): class Waiter(models.Model):
restaurant = models.ForeignKey(Restaurant) restaurant = models.ForeignKey(Restaurant)
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
def __unicode__(self): def __str__(self):
return "%s the waiter at %s" % (self.name, self.restaurant) return "%s the waiter at %s" % (self.name, self.restaurant)
class ManualPrimaryKey(models.Model): class ManualPrimaryKey(models.Model):
@ -40,10 +44,11 @@ class RelatedModel(models.Model):
link = models.OneToOneField(ManualPrimaryKey) link = models.OneToOneField(ManualPrimaryKey)
name = models.CharField(max_length = 50) name = models.CharField(max_length = 50)
@python_2_unicode_compatible
class MultiModel(models.Model): class MultiModel(models.Model):
link1 = models.OneToOneField(Place) link1 = models.OneToOneField(Place)
link2 = models.OneToOneField(ManualPrimaryKey) link2 = models.OneToOneField(ManualPrimaryKey)
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
def __unicode__(self): def __str__(self):
return "Multimodel %s" % self.name return "Multimodel %s" % self.name

View File

@ -10,8 +10,10 @@ clauses using the variable ``django.db.models.Q`` (or any object with an
""" """
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
headline = models.CharField(max_length=50) headline = models.CharField(max_length=50)
pub_date = models.DateTimeField() pub_date = models.DateTimeField()
@ -19,5 +21,5 @@ class Article(models.Model):
class Meta: class Meta:
ordering = ('pub_date',) ordering = ('pub_date',)
def __unicode__(self): def __str__(self):
return self.headline return self.headline

View File

@ -4,11 +4,13 @@ Tests for the order_with_respect_to Meta attribute.
from django.db import models from django.db import models
from django.utils import six from django.utils import six
from django.utils.encoding import python_2_unicode_compatible
class Question(models.Model): class Question(models.Model):
text = models.CharField(max_length=200) text = models.CharField(max_length=200)
@python_2_unicode_compatible
class Answer(models.Model): class Answer(models.Model):
text = models.CharField(max_length=200) text = models.CharField(max_length=200)
question = models.ForeignKey(Question) question = models.ForeignKey(Question)
@ -16,9 +18,10 @@ class Answer(models.Model):
class Meta: class Meta:
order_with_respect_to = 'question' order_with_respect_to = 'question'
def __unicode__(self): def __str__(self):
return six.text_type(self.text) return six.text_type(self.text)
@python_2_unicode_compatible
class Post(models.Model): class Post(models.Model):
title = models.CharField(max_length=200) title = models.CharField(max_length=200)
parent = models.ForeignKey("self", related_name="children", null=True) parent = models.ForeignKey("self", related_name="children", null=True)
@ -26,5 +29,5 @@ class Post(models.Model):
class Meta: class Meta:
order_with_respect_to = "parent" order_with_respect_to = "parent"
def __unicode__(self): def __str__(self):
return self.title return self.title

View File

@ -14,22 +14,25 @@ undefined -- not random, just undefined.
""" """
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
headline = models.CharField(max_length=100) headline = models.CharField(max_length=100)
pub_date = models.DateTimeField() pub_date = models.DateTimeField()
class Meta: class Meta:
ordering = ('-pub_date', 'headline') ordering = ('-pub_date', 'headline')
def __unicode__(self): def __str__(self):
return self.headline return self.headline
@python_2_unicode_compatible
class ArticlePKOrdering(models.Model): class ArticlePKOrdering(models.Model):
headline = models.CharField(max_length=100) headline = models.CharField(max_length=100)
pub_date = models.DateTimeField() pub_date = models.DateTimeField()
class Meta: class Meta:
ordering = ('-pk',) ordering = ('-pk',)
def __unicode__(self): def __str__(self):
return self.headline return self.headline

View File

@ -7,11 +7,13 @@ objects into easily readable pages.
""" """
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
headline = models.CharField(max_length=100, default='Default headline') headline = models.CharField(max_length=100, default='Default headline')
pub_date = models.DateTimeField() pub_date = models.DateTimeField()
def __unicode__(self): def __str__(self):
return self.headline return self.headline

View File

@ -1,16 +1,18 @@
from django.contrib.contenttypes import generic from django.contrib.contenttypes import generic
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
## Basic tests ## Basic tests
@python_2_unicode_compatible
class Author(models.Model): class Author(models.Model):
name = models.CharField(max_length=50, unique=True) name = models.CharField(max_length=50, unique=True)
first_book = models.ForeignKey('Book', related_name='first_time_authors') first_book = models.ForeignKey('Book', related_name='first_time_authors')
favorite_authors = models.ManyToManyField( favorite_authors = models.ManyToManyField(
'self', through='FavoriteAuthors', symmetrical=False, related_name='favors_me') 'self', through='FavoriteAuthors', symmetrical=False, related_name='favors_me')
def __unicode__(self): def __str__(self):
return self.name return self.name
class Meta: class Meta:
@ -30,6 +32,7 @@ class FavoriteAuthors(models.Model):
ordering = ['id'] ordering = ['id']
@python_2_unicode_compatible
class AuthorAddress(models.Model): class AuthorAddress(models.Model):
author = models.ForeignKey(Author, to_field='name', related_name='addresses') author = models.ForeignKey(Author, to_field='name', related_name='addresses')
address = models.TextField() address = models.TextField()
@ -37,15 +40,16 @@ class AuthorAddress(models.Model):
class Meta: class Meta:
ordering = ['id'] ordering = ['id']
def __unicode__(self): def __str__(self):
return self.address return self.address
@python_2_unicode_compatible
class Book(models.Model): class Book(models.Model):
title = models.CharField(max_length=255) title = models.CharField(max_length=255)
authors = models.ManyToManyField(Author, related_name='books') authors = models.ManyToManyField(Author, related_name='books')
def __unicode__(self): def __str__(self):
return self.title return self.title
class Meta: class Meta:
@ -58,11 +62,12 @@ class BookWithYear(Book):
AuthorWithAge, related_name='books_with_year') AuthorWithAge, related_name='books_with_year')
@python_2_unicode_compatible
class Reader(models.Model): class Reader(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
books_read = models.ManyToManyField(Book, related_name='read_by') books_read = models.ManyToManyField(Book, related_name='read_by')
def __unicode__(self): def __str__(self):
return self.name return self.name
class Meta: class Meta:
@ -86,13 +91,14 @@ class TeacherManager(models.Manager):
return super(TeacherManager, self).get_query_set().prefetch_related('qualifications') return super(TeacherManager, self).get_query_set().prefetch_related('qualifications')
@python_2_unicode_compatible
class Teacher(models.Model): class Teacher(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
qualifications = models.ManyToManyField(Qualification) qualifications = models.ManyToManyField(Qualification)
objects = TeacherManager() objects = TeacherManager()
def __unicode__(self): def __str__(self):
return "%s (%s)" % (self.name, ", ".join(q.name for q in self.qualifications.all())) return "%s (%s)" % (self.name, ", ".join(q.name for q in self.qualifications.all()))
class Meta: class Meta:
@ -109,6 +115,7 @@ class Department(models.Model):
## GenericRelation/GenericForeignKey tests ## GenericRelation/GenericForeignKey tests
@python_2_unicode_compatible
class TaggedItem(models.Model): class TaggedItem(models.Model):
tag = models.SlugField() tag = models.SlugField()
content_type = models.ForeignKey(ContentType, related_name="taggeditem_set2") content_type = models.ForeignKey(ContentType, related_name="taggeditem_set2")
@ -119,7 +126,7 @@ class TaggedItem(models.Model):
created_by_fkey = models.PositiveIntegerField(null=True) created_by_fkey = models.PositiveIntegerField(null=True)
created_by = generic.GenericForeignKey('created_by_ct', 'created_by_fkey',) created_by = generic.GenericForeignKey('created_by_ct', 'created_by_fkey',)
def __unicode__(self): def __str__(self):
return self.tag return self.tag
@ -169,12 +176,13 @@ class Person(models.Model):
## Models for nullable FK tests ## Models for nullable FK tests
@python_2_unicode_compatible
class Employee(models.Model): class Employee(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
boss = models.ForeignKey('self', null=True, boss = models.ForeignKey('self', null=True,
related_name='serfs') related_name='serfs')
def __unicode__(self): def __str__(self):
return self.name return self.name
class Meta: class Meta:

View File

@ -5,6 +5,7 @@ than using a new table of their own. This allows them to act as simple proxies,
providing a modified interface to the data from the base class. providing a modified interface to the data from the base class.
""" """
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
# A couple of managers for testing managing overriding in proxy model cases. # A couple of managers for testing managing overriding in proxy model cases.
@ -16,6 +17,7 @@ class SubManager(models.Manager):
def get_query_set(self): def get_query_set(self):
return super(SubManager, self).get_query_set().exclude(name="wilma") return super(SubManager, self).get_query_set().exclude(name="wilma")
@python_2_unicode_compatible
class Person(models.Model): class Person(models.Model):
""" """
A simple concrete base class. A simple concrete base class.
@ -24,7 +26,7 @@ class Person(models.Model):
objects = PersonManager() objects = PersonManager()
def __unicode__(self): def __str__(self):
return self.name return self.name
class Abstract(models.Model): class Abstract(models.Model):
@ -82,10 +84,11 @@ class MyPersonProxy(MyPerson):
class LowerStatusPerson(MyPersonProxy): class LowerStatusPerson(MyPersonProxy):
status = models.CharField(max_length=80) status = models.CharField(max_length=80)
@python_2_unicode_compatible
class User(models.Model): class User(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
def __unicode__(self): def __str__(self):
return self.name return self.name
class UserProxy(User): class UserProxy(User):
@ -100,11 +103,12 @@ class UserProxyProxy(UserProxy):
class Country(models.Model): class Country(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
@python_2_unicode_compatible
class State(models.Model): class State(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
country = models.ForeignKey(Country) country = models.ForeignKey(Country)
def __unicode__(self): def __str__(self):
return self.name return self.name
class StateProxy(State): class StateProxy(State):
@ -124,11 +128,12 @@ class ProxyTrackerUser(TrackerUser):
proxy = True proxy = True
@python_2_unicode_compatible
class Issue(models.Model): class Issue(models.Model):
summary = models.CharField(max_length=255) summary = models.CharField(max_length=255)
assignee = models.ForeignKey(TrackerUser) assignee = models.ForeignKey(TrackerUser)
def __unicode__(self): def __str__(self):
return ':'.join((self.__class__.__name__,self.summary,)) return ':'.join((self.__class__.__name__,self.summary,))
class Bug(Issue): class Bug(Issue):

View File

@ -8,8 +8,10 @@ reserved-name usage.
""" """
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Thing(models.Model): class Thing(models.Model):
when = models.CharField(max_length=1, primary_key=True) when = models.CharField(max_length=1, primary_key=True)
join = models.CharField(max_length=1) join = models.CharField(max_length=1)
@ -22,5 +24,5 @@ class Thing(models.Model):
class Meta: class Meta:
db_table = 'select' db_table = 'select'
def __unicode__(self): def __str__(self):
return self.when return self.when

View File

@ -5,25 +5,29 @@ This demonstrates the reverse lookup features of the database API.
""" """
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class User(models.Model): class User(models.Model):
name = models.CharField(max_length=200) name = models.CharField(max_length=200)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Poll(models.Model): class Poll(models.Model):
question = models.CharField(max_length=200) question = models.CharField(max_length=200)
creator = models.ForeignKey(User) creator = models.ForeignKey(User)
def __unicode__(self): def __str__(self):
return self.question return self.question
@python_2_unicode_compatible
class Choice(models.Model): class Choice(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
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 __unicode__(self): def __str__(self):
return self.name return self.name

View File

@ -7,8 +7,10 @@ the methods.
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Person(models.Model): class Person(models.Model):
first_name = models.CharField(max_length=20) first_name = models.CharField(max_length=20)
last_name = models.CharField(max_length=20) last_name = models.CharField(max_length=20)
@ -17,7 +19,7 @@ class Person(models.Model):
super(Person, self).__init__(*args, **kwargs) super(Person, self).__init__(*args, **kwargs)
self.data = [] self.data = []
def __unicode__(self): def __str__(self):
return "%s %s" % (self.first_name, self.last_name) return "%s %s" % (self.first_name, self.last_name)
def save(self, *args, **kwargs): def save(self, *args, **kwargs):

View File

@ -8,52 +8,61 @@ the select-related behavior will traverse.
""" """
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
# Who remembers high school biology? # Who remembers high school biology?
@python_2_unicode_compatible
class Domain(models.Model): class Domain(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Kingdom(models.Model): class Kingdom(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
domain = models.ForeignKey(Domain) domain = models.ForeignKey(Domain)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Phylum(models.Model): class Phylum(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
kingdom = models.ForeignKey(Kingdom) kingdom = models.ForeignKey(Kingdom)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Klass(models.Model): class Klass(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
phylum = models.ForeignKey(Phylum) phylum = models.ForeignKey(Phylum)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Order(models.Model): class Order(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
klass = models.ForeignKey(Klass) klass = models.ForeignKey(Klass)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Family(models.Model): class Family(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
order = models.ForeignKey(Order) order = models.ForeignKey(Order)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Genus(models.Model): class Genus(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
family = models.ForeignKey(Family) family = models.ForeignKey(Family)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Species(models.Model): class Species(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
genus = models.ForeignKey(Genus) genus = models.ForeignKey(Genus)
def __unicode__(self): def __str__(self):
return self.name return self.name

View File

@ -11,28 +11,32 @@ from decimal import Decimal
from django.db import models from django.db import models
from django.utils import six from django.utils import six
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Category(models.Model): class Category(models.Model):
name = models.CharField(max_length=20) name = models.CharField(max_length=20)
class Meta: class Meta:
ordering = ('name',) ordering = ('name',)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Author(models.Model): class Author(models.Model):
name = models.CharField(max_length=20) name = models.CharField(max_length=20)
class Meta: class Meta:
ordering = ('name',) ordering = ('name',)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
author = models.ForeignKey(Author) author = models.ForeignKey(Author)
headline = models.CharField(max_length=50) headline = models.CharField(max_length=50)
@ -42,28 +46,31 @@ class Article(models.Model):
class Meta: class Meta:
ordering = ('pub_date',) ordering = ('pub_date',)
def __unicode__(self): def __str__(self):
return self.headline return self.headline
@python_2_unicode_compatible
class AuthorProfile(models.Model): class AuthorProfile(models.Model):
author = models.OneToOneField(Author, primary_key=True) author = models.OneToOneField(Author, primary_key=True)
date_of_birth = models.DateField() date_of_birth = models.DateField()
def __unicode__(self): def __str__(self):
return "Profile of %s" % self.author return "Profile of %s" % self.author
@python_2_unicode_compatible
class Actor(models.Model): class Actor(models.Model):
name = models.CharField(max_length=20, primary_key=True) name = models.CharField(max_length=20, primary_key=True)
class Meta: class Meta:
ordering = ('name',) ordering = ('name',)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Movie(models.Model): class Movie(models.Model):
actor = models.ForeignKey(Actor) actor = models.ForeignKey(Actor)
title = models.CharField(max_length=50) title = models.CharField(max_length=50)
@ -72,7 +79,7 @@ class Movie(models.Model):
class Meta: class Meta:
ordering = ('title',) ordering = ('title',)
def __unicode__(self): def __str__(self):
return self.title return self.title
@ -80,11 +87,12 @@ class Score(models.Model):
score = models.FloatField() score = models.FloatField()
@python_2_unicode_compatible
class Team(object): class Team(object):
def __init__(self, title): def __init__(self, title):
self.title = title self.title = title
def __unicode__(self): def __str__(self):
raise NotImplementedError("Not so simple") raise NotImplementedError("Not so simple")
def to_string(self): def to_string(self):
@ -109,10 +117,11 @@ class TeamField(models.CharField):
return self._get_val_from_obj(obj).to_string() return self._get_val_from_obj(obj).to_string()
@python_2_unicode_compatible
class Player(models.Model): class Player(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
rank = models.IntegerField() rank = models.IntegerField()
team = TeamField() team = TeamField()
def __unicode__(self): def __str__(self):
return '%s (%d) playing for %s' % (self.name, self.rank, self.team.to_string()) return '%s (%d) playing for %s' % (self.name, self.rank, self.team.to_string())

View File

@ -4,18 +4,21 @@ Testing signals before/after saving and deleting.
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Person(models.Model): class Person(models.Model):
first_name = models.CharField(max_length=20) first_name = models.CharField(max_length=20)
last_name = models.CharField(max_length=20) last_name = models.CharField(max_length=20)
def __unicode__(self): def __str__(self):
return "%s %s" % (self.first_name, self.last_name) return "%s %s" % (self.first_name, self.last_name)
@python_2_unicode_compatible
class Car(models.Model): class Car(models.Model):
make = models.CharField(max_length=20) make = models.CharField(max_length=20)
model = models.CharField(max_length=20) model = models.CharField(max_length=20)
def __unicode__(self): def __str__(self):
return "%s %s" % (self.make, self.model) return "%s %s" % (self.make, self.model)

View File

@ -15,6 +15,7 @@ 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 python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
@ -26,9 +27,10 @@ class Article(models.Model):
# in ASCII. # in ASCII.
return self.headline return self.headline
@python_2_unicode_compatible
class InternationalArticle(models.Model): class InternationalArticle(models.Model):
headline = models.CharField(max_length=100) headline = models.CharField(max_length=100)
pub_date = models.DateTimeField() pub_date = models.DateTimeField()
def __unicode__(self): def __str__(self):
return self.headline return self.headline

View File

@ -9,8 +9,10 @@ manually.
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Reporter(models.Model): class Reporter(models.Model):
first_name = models.CharField(max_length=30) first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30)
@ -19,5 +21,5 @@ class Reporter(models.Model):
class Meta: class Meta:
ordering = ('first_name', 'last_name') ordering = ('first_name', 'last_name')
def __unicode__(self): def __str__(self):
return "%s %s" % (self.first_name, self.last_name) return "%s %s" % (self.first_name, self.last_name)

View File

@ -4,9 +4,11 @@ is generated for the table on various manage.py operations.
""" """
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
# All of these models are created in the database by Django. # All of these models are created in the database by Django.
@python_2_unicode_compatible
class A01(models.Model): class A01(models.Model):
f_a = models.CharField(max_length=10, db_index=True) f_a = models.CharField(max_length=10, db_index=True)
f_b = models.IntegerField() f_b = models.IntegerField()
@ -14,9 +16,10 @@ class A01(models.Model):
class Meta: class Meta:
db_table = 'a01' db_table = 'a01'
def __unicode__(self): def __str__(self):
return self.f_a return self.f_a
@python_2_unicode_compatible
class B01(models.Model): class B01(models.Model):
fk_a = models.ForeignKey(A01) fk_a = models.ForeignKey(A01)
f_a = models.CharField(max_length=10, db_index=True) f_a = models.CharField(max_length=10, db_index=True)
@ -27,9 +30,10 @@ class B01(models.Model):
# 'managed' is True by default. This tests we can set it explicitly. # 'managed' is True by default. This tests we can set it explicitly.
managed = True managed = True
def __unicode__(self): def __str__(self):
return self.f_a return self.f_a
@python_2_unicode_compatible
class C01(models.Model): class C01(models.Model):
mm_a = models.ManyToManyField(A01, db_table='d01') mm_a = models.ManyToManyField(A01, db_table='d01')
f_a = models.CharField(max_length=10, db_index=True) f_a = models.CharField(max_length=10, db_index=True)
@ -38,13 +42,14 @@ class C01(models.Model):
class Meta: class Meta:
db_table = 'c01' db_table = 'c01'
def __unicode__(self): def __str__(self):
return self.f_a return self.f_a
# All of these models use the same tables as the previous set (they are shadows # All of these models use the same tables as the previous set (they are shadows
# of possibly a subset of the columns). There should be no creation errors, # of possibly a subset of the columns). There should be no creation errors,
# since we have told Django they aren't managed by Django. # since we have told Django they aren't managed by Django.
@python_2_unicode_compatible
class A02(models.Model): class A02(models.Model):
f_a = models.CharField(max_length=10, db_index=True) f_a = models.CharField(max_length=10, db_index=True)
@ -52,9 +57,10 @@ class A02(models.Model):
db_table = 'a01' db_table = 'a01'
managed = False managed = False
def __unicode__(self): def __str__(self):
return self.f_a return self.f_a
@python_2_unicode_compatible
class B02(models.Model): class B02(models.Model):
class Meta: class Meta:
db_table = 'b01' db_table = 'b01'
@ -64,11 +70,12 @@ class B02(models.Model):
f_a = models.CharField(max_length=10, db_index=True) f_a = models.CharField(max_length=10, db_index=True)
f_b = models.IntegerField() f_b = models.IntegerField()
def __unicode__(self): def __str__(self):
return self.f_a return self.f_a
# To re-use the many-to-many intermediate table, we need to manually set up # To re-use the many-to-many intermediate table, we need to manually set up
# things up. # things up.
@python_2_unicode_compatible
class C02(models.Model): class C02(models.Model):
mm_a = models.ManyToManyField(A02, through="Intermediate") mm_a = models.ManyToManyField(A02, through="Intermediate")
f_a = models.CharField(max_length=10, db_index=True) f_a = models.CharField(max_length=10, db_index=True)
@ -78,7 +85,7 @@ class C02(models.Model):
db_table = 'c01' db_table = 'c01'
managed = False managed = False
def __unicode__(self): def __str__(self):
return self.f_a return self.f_a
class Intermediate(models.Model): class Intermediate(models.Model):

View File

@ -5,21 +5,24 @@ updates.
from django.db import models from django.db import models
from django.utils import six from django.utils import six
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class DataPoint(models.Model): class DataPoint(models.Model):
name = models.CharField(max_length=20) name = models.CharField(max_length=20)
value = models.CharField(max_length=20) value = models.CharField(max_length=20)
another_value = models.CharField(max_length=20, blank=True) another_value = models.CharField(max_length=20, blank=True)
def __unicode__(self): def __str__(self):
return six.text_type(self.name) return six.text_type(self.name)
@python_2_unicode_compatible
class RelatedPoint(models.Model): class RelatedPoint(models.Model):
name = models.CharField(max_length=20) name = models.CharField(max_length=20)
data = models.ForeignKey(DataPoint) data = models.ForeignKey(DataPoint)
def __unicode__(self): def __str__(self):
return six.text_type(self.name) return six.text_type(self.name)

View File

@ -1,5 +1,6 @@
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
GENDER_CHOICES = ( GENDER_CHOICES = (
('M', 'Male'), ('M', 'Male'),
@ -10,11 +11,12 @@ class Account(models.Model):
num = models.IntegerField() num = models.IntegerField()
@python_2_unicode_compatible
class Person(models.Model): class Person(models.Model):
name = models.CharField(max_length=20) name = models.CharField(max_length=20)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES) gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
def __unicode__(self): def __str__(self):
return self.name return self.name
@ -24,11 +26,12 @@ class Employee(Person):
accounts = models.ManyToManyField('Account', related_name='employees', blank=True, null=True) accounts = models.ManyToManyField('Account', related_name='employees', blank=True, null=True)
@python_2_unicode_compatible
class Profile(models.Model): class Profile(models.Model):
name = models.CharField(max_length=200) name = models.CharField(max_length=200)
salary = models.FloatField(default=1000.0) salary = models.FloatField(default=1000.0)
def __unicode__(self): def __str__(self):
return self.name return self.name

View File

@ -4,6 +4,7 @@ from datetime import datetime
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
def validate_answer_to_universe(value): def validate_answer_to_universe(value):
@ -66,13 +67,14 @@ class Article(models.Model):
if self.pub_date is None: if self.pub_date is None:
self.pub_date = datetime.now() self.pub_date = datetime.now()
@python_2_unicode_compatible
class Post(models.Model): class Post(models.Model):
title = models.CharField(max_length=50, unique_for_date='posted', blank=True) title = models.CharField(max_length=50, unique_for_date='posted', blank=True)
slug = models.CharField(max_length=50, unique_for_year='posted', blank=True) slug = models.CharField(max_length=50, unique_for_year='posted', blank=True)
subtitle = models.CharField(max_length=50, unique_for_month='posted', blank=True) subtitle = models.CharField(max_length=50, unique_for_month='posted', blank=True)
posted = models.DateField() posted = models.DateField()
def __unicode__(self): def __str__(self):
return self.name return self.name
class FlexibleDatePost(models.Model): class FlexibleDatePost(models.Model):

View File

@ -1,4 +1,5 @@
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
class Event(models.Model): class Event(models.Model):
# Oracle can have problems with a column named "date" # Oracle can have problems with a column named "date"
@ -20,17 +21,19 @@ class Band(models.Model):
nr_of_members = models.PositiveIntegerField() nr_of_members = models.PositiveIntegerField()
genres = models.ManyToManyField(Genre) genres = models.ManyToManyField(Genre)
@python_2_unicode_compatible
class Musician(models.Model): class Musician(models.Model):
name = models.CharField(max_length=30) name = models.CharField(max_length=30)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Group(models.Model): class Group(models.Model):
name = models.CharField(max_length=30) name = models.CharField(max_length=30)
members = models.ManyToManyField(Musician, through='Membership') members = models.ManyToManyField(Musician, through='Membership')
def __unicode__(self): def __str__(self):
return self.name return self.name
class Membership(models.Model): class Membership(models.Model):

View File

@ -2,13 +2,15 @@ from functools import update_wrapper
from django.contrib import admin from django.contrib import admin
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Action(models.Model): class Action(models.Model):
name = models.CharField(max_length=50, primary_key=True) name = models.CharField(max_length=50, primary_key=True)
description = models.CharField(max_length=70) description = models.CharField(max_length=70)
def __unicode__(self): def __str__(self):
return self.name return self.name

View File

@ -2,8 +2,10 @@ from __future__ import unicode_literals
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Book(models.Model): class Book(models.Model):
title = models.CharField(max_length=50) title = models.CharField(max_length=50)
year = models.PositiveIntegerField(null=True, blank=True) year = models.PositiveIntegerField(null=True, blank=True)
@ -13,20 +15,22 @@ class Book(models.Model):
date_registered = models.DateField(null=True) date_registered = models.DateField(null=True)
no = models.IntegerField(verbose_name='number', blank=True, null=True) # This field is intentionally 2 characters long. See #16080. no = models.IntegerField(verbose_name='number', blank=True, null=True) # This field is intentionally 2 characters long. See #16080.
def __unicode__(self): def __str__(self):
return self.title return self.title
@python_2_unicode_compatible
class Department(models.Model): class Department(models.Model):
code = models.CharField(max_length=4, unique=True) code = models.CharField(max_length=4, unique=True)
description = models.CharField(max_length=50, blank=True, null=True) description = models.CharField(max_length=50, blank=True, null=True)
def __unicode__(self): def __str__(self):
return self.description return self.description
@python_2_unicode_compatible
class Employee(models.Model): class Employee(models.Model):
department = models.ForeignKey(Department, to_field="code") department = models.ForeignKey(Department, to_field="code")
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
def __unicode__(self): def __str__(self):
return self.name return self.name

View File

@ -7,22 +7,26 @@ from __future__ import unicode_literals
from django.db import models from django.db import models
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic from django.contrib.contenttypes import generic
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Parent(models.Model): class Parent(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Teacher(models.Model): class Teacher(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Child(models.Model): class Child(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
teacher = models.ForeignKey(Teacher) teacher = models.ForeignKey(Teacher)
@ -31,7 +35,7 @@ class Child(models.Model):
object_id = models.PositiveIntegerField() object_id = models.PositiveIntegerField()
parent = generic.GenericForeignKey() parent = generic.GenericForeignKey()
def __unicode__(self): def __str__(self):
return 'I am %s, a child of %s' % (self.name, self.parent) return 'I am %s, a child of %s' % (self.name, self.parent)

View File

@ -1,11 +1,13 @@
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
headline = models.CharField(max_length=100, default='Default headline') headline = models.CharField(max_length=100, default='Default headline')
pub_date = models.DateTimeField() pub_date = models.DateTimeField()
def __unicode__(self): def __str__(self):
return self.headline return self.headline
class Meta: class Meta:

View File

@ -1,5 +1,6 @@
from django.db import models from django.db import models
from django.utils import six from django.utils import six
from django.utils.encoding import python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
@ -18,11 +19,12 @@ class Article(models.Model):
return "nothing" return "nothing"
test_from_model_with_override.short_description = "not What you Expect" test_from_model_with_override.short_description = "not What you Expect"
@python_2_unicode_compatible
class Count(models.Model): class Count(models.Model):
num = models.PositiveSmallIntegerField() num = models.PositiveSmallIntegerField()
parent = models.ForeignKey('self', null=True) parent = models.ForeignKey('self', null=True)
def __unicode__(self): def __str__(self):
return six.text_type(self.num) return six.text_type(self.num)
class Event(models.Model): class Event(models.Model):

View File

@ -3,12 +3,14 @@ Tests of ModelAdmin validation logic.
""" """
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
class Album(models.Model): class Album(models.Model):
title = models.CharField(max_length=150) title = models.CharField(max_length=150)
@python_2_unicode_compatible
class Song(models.Model): class Song(models.Model):
title = models.CharField(max_length=150) title = models.CharField(max_length=150)
album = models.ForeignKey(Album) album = models.ForeignKey(Album)
@ -17,7 +19,7 @@ class Song(models.Model):
class Meta: class Meta:
ordering = ('title',) ordering = ('title',)
def __unicode__(self): def __str__(self):
return self.title return self.title
def readonly_method_on_model(self): def readonly_method_on_model(self):

View File

@ -10,6 +10,7 @@ from django.contrib.contenttypes import generic
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.core.files.storage import FileSystemStorage from django.core.files.storage import FileSystemStorage
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
class Section(models.Model): class Section(models.Model):
@ -20,6 +21,7 @@ class Section(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
@python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
""" """
A simple article to test admin views. Test backwards compatibility. A simple article to test admin views. Test backwards compatibility.
@ -29,7 +31,7 @@ class Article(models.Model):
date = models.DateTimeField() date = models.DateTimeField()
section = models.ForeignKey(Section, null=True, blank=True) section = models.ForeignKey(Section, null=True, blank=True)
def __unicode__(self): def __str__(self):
return self.title return self.title
def model_year(self): def model_year(self):
@ -38,30 +40,33 @@ class Article(models.Model):
model_year.short_description = '' model_year.short_description = ''
@python_2_unicode_compatible
class Book(models.Model): class Book(models.Model):
""" """
A simple book that has chapters. A simple book that has chapters.
""" """
name = models.CharField(max_length=100, verbose_name='¿Name?') name = models.CharField(max_length=100, verbose_name='¿Name?')
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Promo(models.Model): class Promo(models.Model):
name = models.CharField(max_length=100, verbose_name='¿Name?') name = models.CharField(max_length=100, verbose_name='¿Name?')
book = models.ForeignKey(Book) book = models.ForeignKey(Book)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Chapter(models.Model): class Chapter(models.Model):
title = models.CharField(max_length=100, verbose_name='¿Title?') title = models.CharField(max_length=100, verbose_name='¿Title?')
content = models.TextField() content = models.TextField()
book = models.ForeignKey(Book) book = models.ForeignKey(Book)
def __unicode__(self): def __str__(self):
return self.title return self.title
class Meta: class Meta:
@ -69,19 +74,21 @@ class Chapter(models.Model):
verbose_name = '¿Chapter?' verbose_name = '¿Chapter?'
@python_2_unicode_compatible
class ChapterXtra1(models.Model): class ChapterXtra1(models.Model):
chap = models.OneToOneField(Chapter, verbose_name='¿Chap?') chap = models.OneToOneField(Chapter, verbose_name='¿Chap?')
xtra = models.CharField(max_length=100, verbose_name='¿Xtra?') xtra = models.CharField(max_length=100, verbose_name='¿Xtra?')
def __unicode__(self): def __str__(self):
return '¿Xtra1: %s' % self.xtra return '¿Xtra1: %s' % self.xtra
@python_2_unicode_compatible
class ChapterXtra2(models.Model): class ChapterXtra2(models.Model):
chap = models.OneToOneField(Chapter, verbose_name='¿Chap?') chap = models.OneToOneField(Chapter, verbose_name='¿Chap?')
xtra = models.CharField(max_length=100, verbose_name='¿Xtra?') xtra = models.CharField(max_length=100, verbose_name='¿Xtra?')
def __unicode__(self): def __str__(self):
return '¿Xtra2: %s' % self.xtra return '¿Xtra2: %s' % self.xtra
@ -94,20 +101,22 @@ class CustomArticle(models.Model):
date = models.DateTimeField() date = models.DateTimeField()
@python_2_unicode_compatible
class ModelWithStringPrimaryKey(models.Model): class ModelWithStringPrimaryKey(models.Model):
string_pk = models.CharField(max_length=255, primary_key=True) string_pk = models.CharField(max_length=255, primary_key=True)
def __unicode__(self): def __str__(self):
return self.string_pk return self.string_pk
def get_absolute_url(self): def get_absolute_url(self):
return '/dummy/%s/' % self.string_pk return '/dummy/%s/' % self.string_pk
@python_2_unicode_compatible
class Color(models.Model): class Color(models.Model):
value = models.CharField(max_length=10) value = models.CharField(max_length=10)
warm = models.BooleanField() warm = models.BooleanField()
def __unicode__(self): def __str__(self):
return self.value return self.value
# we replicate Color to register with another ModelAdmin # we replicate Color to register with another ModelAdmin
@ -115,29 +124,33 @@ class Color2(Color):
class Meta: class Meta:
proxy = True proxy = True
@python_2_unicode_compatible
class Thing(models.Model): class Thing(models.Model):
title = models.CharField(max_length=20) title = models.CharField(max_length=20)
color = models.ForeignKey(Color, limit_choices_to={'warm': True}) color = models.ForeignKey(Color, limit_choices_to={'warm': True})
def __unicode__(self): def __str__(self):
return self.title return self.title
@python_2_unicode_compatible
class Actor(models.Model): class Actor(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
age = models.IntegerField() age = models.IntegerField()
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Inquisition(models.Model): class Inquisition(models.Model):
expected = models.BooleanField() expected = models.BooleanField()
leader = models.ForeignKey(Actor) leader = models.ForeignKey(Actor)
country = models.CharField(max_length=20) country = models.CharField(max_length=20)
def __unicode__(self): def __str__(self):
return "by %s from %s" % (self.leader, self.country) return "by %s from %s" % (self.leader, self.country)
@python_2_unicode_compatible
class Sketch(models.Model): class Sketch(models.Model):
title = models.CharField(max_length=100) title = models.CharField(max_length=100)
inquisition = models.ForeignKey(Inquisition, limit_choices_to={'leader__name': 'Palin', inquisition = models.ForeignKey(Inquisition, limit_choices_to={'leader__name': 'Palin',
@ -145,7 +158,7 @@ class Sketch(models.Model):
'expected': False, 'expected': False,
}) })
def __unicode__(self): def __str__(self):
return self.title return self.title
@ -161,6 +174,7 @@ class Fabric(models.Model):
surface = models.CharField(max_length=20, choices=NG_CHOICES) surface = models.CharField(max_length=20, choices=NG_CHOICES)
@python_2_unicode_compatible
class Person(models.Model): class Person(models.Model):
GENDER_CHOICES = ( GENDER_CHOICES = (
(1, "Male"), (1, "Male"),
@ -171,20 +185,22 @@ class Person(models.Model):
age = models.IntegerField(default=21) age = models.IntegerField(default=21)
alive = models.BooleanField() alive = models.BooleanField()
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Persona(models.Model): class Persona(models.Model):
""" """
A simple persona associated with accounts, to test inlining of related A simple persona associated with accounts, to test inlining of related
accounts which inherit from a common accounts class. accounts which inherit from a common accounts class.
""" """
name = models.CharField(blank=False, max_length=80) name = models.CharField(blank=False, max_length=80)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Account(models.Model): class Account(models.Model):
""" """
A simple, generic account encapsulating the information shared by all A simple, generic account encapsulating the information shared by all
@ -194,7 +210,7 @@ class Account(models.Model):
persona = models.ForeignKey(Persona, related_name="accounts") persona = models.ForeignKey(Persona, related_name="accounts")
servicename = 'generic service' servicename = 'generic service'
def __unicode__(self): def __str__(self):
return "%s: %s" % (self.servicename, self.username) return "%s: %s" % (self.servicename, self.username)
@ -208,11 +224,12 @@ class BarAccount(Account):
servicename = 'bar' servicename = 'bar'
@python_2_unicode_compatible
class Subscriber(models.Model): class Subscriber(models.Model):
name = models.CharField(blank=False, max_length=80) name = models.CharField(blank=False, max_length=80)
email = models.EmailField(blank=False, max_length=175) email = models.EmailField(blank=False, max_length=175)
def __unicode__(self): def __str__(self):
return "%s (%s)" % (self.name, self.email) return "%s (%s)" % (self.name, self.email)
@ -249,8 +266,9 @@ class Child(models.Model):
name = models.CharField(max_length=30, blank=True) name = models.CharField(max_length=30, blank=True)
@python_2_unicode_compatible
class EmptyModel(models.Model): class EmptyModel(models.Model):
def __unicode__(self): def __str__(self):
return "Primary key = %s" % self.id return "Primary key = %s" % self.id
@ -332,6 +350,7 @@ class FancyDoodad(Doodad):
expensive = models.BooleanField(default=True) expensive = models.BooleanField(default=True)
@python_2_unicode_compatible
class Category(models.Model): class Category(models.Model):
collector = models.ForeignKey(Collector) collector = models.ForeignKey(Collector)
order = models.PositiveIntegerField() order = models.PositiveIntegerField()
@ -339,7 +358,7 @@ class Category(models.Model):
class Meta: class Meta:
ordering = ('order',) ordering = ('order',)
def __unicode__(self): def __str__(self):
return '%s:o%s' % (self.id, self.order) return '%s:o%s' % (self.id, self.order)
@ -376,17 +395,19 @@ class Post(models.Model):
return "Very awesome." return "Very awesome."
@python_2_unicode_compatible
class Gadget(models.Model): class Gadget(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Villain(models.Model): class Villain(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
def __unicode__(self): def __str__(self):
return self.name return self.name
@ -394,6 +415,7 @@ class SuperVillain(Villain):
pass pass
@python_2_unicode_compatible
class FunkyTag(models.Model): class FunkyTag(models.Model):
"Because we all know there's only one real use case for GFKs." "Because we all know there's only one real use case for GFKs."
name = models.CharField(max_length=25) name = models.CharField(max_length=25)
@ -401,59 +423,65 @@ class FunkyTag(models.Model):
object_id = models.PositiveIntegerField() object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id') content_object = generic.GenericForeignKey('content_type', 'object_id')
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Plot(models.Model): class Plot(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
team_leader = models.ForeignKey(Villain, related_name='lead_plots') team_leader = models.ForeignKey(Villain, related_name='lead_plots')
contact = models.ForeignKey(Villain, related_name='contact_plots') contact = models.ForeignKey(Villain, related_name='contact_plots')
tags = generic.GenericRelation(FunkyTag) tags = generic.GenericRelation(FunkyTag)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class PlotDetails(models.Model): class PlotDetails(models.Model):
details = models.CharField(max_length=100) details = models.CharField(max_length=100)
plot = models.OneToOneField(Plot) plot = models.OneToOneField(Plot)
def __unicode__(self): def __str__(self):
return self.details return self.details
@python_2_unicode_compatible
class SecretHideout(models.Model): class SecretHideout(models.Model):
""" Secret! Not registered with the admin! """ """ Secret! Not registered with the admin! """
location = models.CharField(max_length=100) location = models.CharField(max_length=100)
villain = models.ForeignKey(Villain) villain = models.ForeignKey(Villain)
def __unicode__(self): def __str__(self):
return self.location return self.location
@python_2_unicode_compatible
class SuperSecretHideout(models.Model): class SuperSecretHideout(models.Model):
""" Secret! Not registered with the admin! """ """ Secret! Not registered with the admin! """
location = models.CharField(max_length=100) location = models.CharField(max_length=100)
supervillain = models.ForeignKey(SuperVillain) supervillain = models.ForeignKey(SuperVillain)
def __unicode__(self): def __str__(self):
return self.location return self.location
@python_2_unicode_compatible
class CyclicOne(models.Model): class CyclicOne(models.Model):
name = models.CharField(max_length=25) name = models.CharField(max_length=25)
two = models.ForeignKey('CyclicTwo') two = models.ForeignKey('CyclicTwo')
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class CyclicTwo(models.Model): class CyclicTwo(models.Model):
name = models.CharField(max_length=25) name = models.CharField(max_length=25)
one = models.ForeignKey(CyclicOne) one = models.ForeignKey(CyclicOne)
def __unicode__(self): def __str__(self):
return self.name return self.name
@ -484,11 +512,12 @@ class Question(models.Model):
question = models.CharField(max_length=20) question = models.CharField(max_length=20)
@python_2_unicode_compatible
class Answer(models.Model): class Answer(models.Model):
question = models.ForeignKey(Question, on_delete=models.PROTECT) question = models.ForeignKey(Question, on_delete=models.PROTECT)
answer = models.CharField(max_length=20) answer = models.CharField(max_length=20)
def __unicode__(self): def __str__(self):
return self.answer return self.answer
@ -523,11 +552,12 @@ class Paper(models.Model):
author = models.CharField(max_length=30, blank=True, null=True) author = models.CharField(max_length=30, blank=True, null=True)
@python_2_unicode_compatible
class CoverLetter(models.Model): class CoverLetter(models.Model):
author = models.CharField(max_length=30) author = models.CharField(max_length=30)
date_written = models.DateField(null=True, blank=True) date_written = models.DateField(null=True, blank=True)
def __unicode__(self): def __str__(self):
return self.author return self.author
@ -575,10 +605,11 @@ class AdminOrderedCallable(models.Model):
order = models.IntegerField() order = models.IntegerField()
stuff = models.CharField(max_length=200) stuff = models.CharField(max_length=200)
@python_2_unicode_compatible
class Report(models.Model): class Report(models.Model):
title = models.CharField(max_length=100) title = models.CharField(max_length=100)
def __unicode__(self): def __str__(self):
return self.title return self.title

View File

@ -2,39 +2,44 @@ from __future__ import unicode_literals
from django.db import models from django.db import models
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.utils.encoding import python_2_unicode_compatible
class MyFileField(models.FileField): class MyFileField(models.FileField):
pass pass
@python_2_unicode_compatible
class Member(models.Model): class Member(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
birthdate = models.DateTimeField(blank=True, null=True) birthdate = models.DateTimeField(blank=True, null=True)
gender = models.CharField(max_length=1, blank=True, choices=[('M','Male'), ('F', 'Female')]) gender = models.CharField(max_length=1, blank=True, choices=[('M','Male'), ('F', 'Female')])
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Band(models.Model): class Band(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
members = models.ManyToManyField(Member) members = models.ManyToManyField(Member)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Album(models.Model): class Album(models.Model):
band = models.ForeignKey(Band) band = models.ForeignKey(Band)
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
cover_art = models.FileField(upload_to='albums') cover_art = models.FileField(upload_to='albums')
backside_art = MyFileField(upload_to='albums_back', null=True) backside_art = MyFileField(upload_to='albums_back', null=True)
def __unicode__(self): def __str__(self):
return self.name return self.name
class HiddenInventoryManager(models.Manager): class HiddenInventoryManager(models.Manager):
def get_query_set(self): def get_query_set(self):
return super(HiddenInventoryManager, self).get_query_set().filter(hidden=False) return super(HiddenInventoryManager, self).get_query_set().filter(hidden=False)
@python_2_unicode_compatible
class Inventory(models.Model): class Inventory(models.Model):
barcode = models.PositiveIntegerField(unique=True) barcode = models.PositiveIntegerField(unique=True)
parent = models.ForeignKey('self', to_field='barcode', blank=True, null=True) parent = models.ForeignKey('self', to_field='barcode', blank=True, null=True)
@ -45,7 +50,7 @@ class Inventory(models.Model):
default_manager = models.Manager() default_manager = models.Manager()
objects = HiddenInventoryManager() objects = HiddenInventoryManager()
def __unicode__(self): def __str__(self):
return self.name return self.name
class Event(models.Model): class Event(models.Model):
@ -56,12 +61,13 @@ class Event(models.Model):
link = models.URLField(blank=True) link = models.URLField(blank=True)
min_age = models.IntegerField(blank=True, null=True) min_age = models.IntegerField(blank=True, null=True)
@python_2_unicode_compatible
class Car(models.Model): class Car(models.Model):
owner = models.ForeignKey(User) owner = models.ForeignKey(User)
make = models.CharField(max_length=30) make = models.CharField(max_length=30)
model = models.CharField(max_length=30) model = models.CharField(max_length=30)
def __unicode__(self): def __str__(self):
return "%s %s" % (self.make, self.model) return "%s %s" % (self.make, self.model)
class CarTire(models.Model): class CarTire(models.Model):
@ -103,19 +109,21 @@ class Advisor(models.Model):
companies = models.ManyToManyField(Company) companies = models.ManyToManyField(Company)
@python_2_unicode_compatible
class Student(models.Model): class Student(models.Model):
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
def __unicode__(self): def __str__(self):
return self.name return self.name
class Meta: class Meta:
ordering = ('name',) ordering = ('name',)
@python_2_unicode_compatible
class School(models.Model): class School(models.Model):
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
students = models.ManyToManyField(Student, related_name='current_schools') students = models.ManyToManyField(Student, related_name='current_schools')
alumni = models.ManyToManyField(Student, related_name='previous_schools') alumni = models.ManyToManyField(Student, related_name='previous_schools')
def __unicode__(self): def __str__(self):
return self.name return self.name

View File

@ -1,24 +1,28 @@
# coding: utf-8 # coding: utf-8
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Author(models.Model): class Author(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
age = models.IntegerField() age = models.IntegerField()
friends = models.ManyToManyField('self', blank=True) friends = models.ManyToManyField('self', blank=True)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Publisher(models.Model): class Publisher(models.Model):
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
num_awards = models.IntegerField() num_awards = models.IntegerField()
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Book(models.Model): class Book(models.Model):
isbn = models.CharField(max_length=9) isbn = models.CharField(max_length=9)
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
@ -33,17 +37,18 @@ class Book(models.Model):
class Meta: class Meta:
ordering = ('name',) ordering = ('name',)
def __unicode__(self): def __str__(self):
return self.name return self.name
@python_2_unicode_compatible
class Store(models.Model): class Store(models.Model):
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
books = models.ManyToManyField(Book) books = models.ManyToManyField(Book)
original_opening = models.DateTimeField() original_opening = models.DateTimeField()
friday_night_closing = models.TimeField() friday_night_closing = models.TimeField()
def __unicode__(self): def __str__(self):
return self.name return self.name
class Entries(models.Model): class Entries(models.Model):
@ -58,8 +63,9 @@ class Clues(models.Model):
Clue = models.CharField(max_length=150) Clue = models.CharField(max_length=150)
@python_2_unicode_compatible
class HardbackBook(Book): class HardbackBook(Book):
weight = models.FloatField() weight = models.FloatField()
def __unicode__(self): def __str__(self):
return "%s (hardback): %s" % (self.name, self.weight) return "%s (hardback): %s" % (self.name, self.weight)

View File

@ -3,21 +3,24 @@ from __future__ import unicode_literals
from django.contrib.contenttypes import generic from django.contrib.contenttypes import generic
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.db import models, connection from django.db import models, connection
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Square(models.Model): class Square(models.Model):
root = models.IntegerField() root = models.IntegerField()
square = models.PositiveIntegerField() square = models.PositiveIntegerField()
def __unicode__(self): def __str__(self):
return "%s ** 2 == %s" % (self.root, self.square) return "%s ** 2 == %s" % (self.root, self.square)
@python_2_unicode_compatible
class Person(models.Model): class Person(models.Model):
first_name = models.CharField(max_length=20) first_name = models.CharField(max_length=20)
last_name = models.CharField(max_length=20) last_name = models.CharField(max_length=20)
def __unicode__(self): def __str__(self):
return '%s %s' % (self.first_name, self.last_name) return '%s %s' % (self.first_name, self.last_name)
@ -55,18 +58,20 @@ class Post(models.Model):
db_table = 'CaseSensitive_Post' db_table = 'CaseSensitive_Post'
@python_2_unicode_compatible
class Reporter(models.Model): class Reporter(models.Model):
first_name = models.CharField(max_length=30) first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30)
def __unicode__(self): def __str__(self):
return "%s %s" % (self.first_name, self.last_name) return "%s %s" % (self.first_name, self.last_name)
@python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
headline = models.CharField(max_length=100) headline = models.CharField(max_length=100)
pub_date = models.DateField() pub_date = models.DateField()
reporter = models.ForeignKey(Reporter) reporter = models.ForeignKey(Reporter)
def __unicode__(self): def __str__(self):
return self.headline return self.headline

View File

@ -6,29 +6,33 @@ more information.
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Author(models.Model): class Author(models.Model):
first_name = models.CharField(max_length=30) first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30)
def __unicode__(self): def __str__(self):
return '%s %s' % (self.first_name, self.last_name) return '%s %s' % (self.first_name, self.last_name)
@python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
author = models.ForeignKey(Author) author = models.ForeignKey(Author)
headline = models.CharField(max_length=100) headline = models.CharField(max_length=100)
def __unicode__(self): def __str__(self):
return self.headline return self.headline
@python_2_unicode_compatible
class Entry(models.Model): class Entry(models.Model):
title = models.CharField(max_length=250) title = models.CharField(max_length=250)
body = models.TextField() body = models.TextField()
pub_date = models.DateField() pub_date = models.DateField()
enable_comments = models.BooleanField() enable_comments = models.BooleanField()
def __unicode__(self): def __str__(self):
return self.title return self.title
class Book(models.Model): class Book(models.Model):

View File

@ -8,26 +8,29 @@ table creation or queries.
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
Article_ID = models.AutoField(primary_key=True, db_column='Article ID') Article_ID = models.AutoField(primary_key=True, db_column='Article ID')
headline = models.CharField(max_length=100) headline = models.CharField(max_length=100)
authors = models.ManyToManyField('Author', db_table='my m2m table') authors = models.ManyToManyField('Author', db_table='my m2m table')
primary_author = models.ForeignKey('Author', db_column='Author ID', related_name='primary_set') primary_author = models.ForeignKey('Author', db_column='Author ID', related_name='primary_set')
def __unicode__(self): def __str__(self):
return self.headline return self.headline
class Meta: class Meta:
ordering = ('headline',) ordering = ('headline',)
@python_2_unicode_compatible
class Author(models.Model): class Author(models.Model):
Author_ID = models.AutoField(primary_key=True, db_column='Author ID') Author_ID = models.AutoField(primary_key=True, db_column='Author ID')
first_name = models.CharField(max_length=30, db_column='first name') first_name = models.CharField(max_length=30, db_column='first name')
last_name = models.CharField(max_length=30, db_column='last name') last_name = models.CharField(max_length=30, db_column='last name')
def __unicode__(self): def __str__(self):
return '%s %s' % (self.first_name, self.last_name) return '%s %s' % (self.first_name, self.last_name)
class Meta: class Meta:

Some files were not shown because too many files have changed in this diff Show More