From f3c43ad1fd9556f0fd026a5dfa93c67a5cf186ca Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Sat, 19 Nov 2016 21:54:19 +0100 Subject: [PATCH] Refs #23919 -- Removed python_2_unicode_compatible decorator usage --- django/contrib/admin/models.py | 3 +- django/contrib/admin/options.py | 3 +- django/contrib/auth/base_user.py | 3 +- django/contrib/auth/models.py | 4 -- django/contrib/contenttypes/fields.py | 3 +- django/contrib/contenttypes/models.py | 3 +- django/contrib/flatpages/models.py | 3 +- django/contrib/gis/db/backends/base/models.py | 2 - .../contrib/gis/db/backends/oracle/models.py | 2 - .../contrib/gis/db/backends/postgis/models.py | 2 - .../gis/db/backends/spatialite/models.py | 2 - django/contrib/gis/gdal/raster/source.py | 5 +-- django/contrib/messages/storage/base.py | 3 +- django/contrib/redirects/models.py | 2 - django/contrib/sessions/base_session.py | 2 - django/contrib/sites/models.py | 2 - django/contrib/sites/requests.py | 4 -- django/core/checks/messages.py | 3 +- django/core/files/base.py | 6 +-- django/core/files/uploadhandler.py | 2 - django/db/migrations/exceptions.py | 2 - django/db/migrations/graph.py | 3 -- django/db/migrations/migration.py | 2 - django/db/migrations/recorder.py | 2 - django/db/models/base.py | 5 +-- django/db/models/fields/__init__.py | 5 +-- django/db/models/manager.py | 2 - django/db/models/options.py | 3 +- django/forms/boundfield.py | 4 +- django/forms/forms.py | 3 +- django/forms/formsets.py | 2 - django/forms/utils.py | 4 +- django/forms/widgets.py | 5 +-- django/template/base.py | 5 +-- django/test/html.py | 4 +- .../writing-code/coding-style.txt | 4 -- docs/intro/tutorial02.txt | 3 -- docs/ref/models/instances.txt | 5 --- docs/ref/unicode.txt | 27 ------------- docs/topics/python3.txt | 21 ---------- tests/admin_changelist/models.py | 3 -- tests/admin_checks/models.py | 2 - tests/admin_custom_urls/models.py | 2 - tests/admin_filters/models.py | 6 --- tests/admin_inlines/models.py | 4 -- tests/admin_utils/models.py | 3 -- tests/admin_views/models.py | 37 ------------------ tests/admin_widgets/models.py | 9 ----- tests/aggregation/models.py | 5 --- tests/aggregation_regress/models.py | 6 --- tests/annotations/models.py | 9 ----- tests/auth_tests/models/custom_permissions.py | 2 - tests/auth_tests/models/custom_user.py | 2 - tests/backends/models.py | 8 ---- tests/basic/models.py | 3 -- tests/choices/models.py | 2 - tests/contenttypes_tests/models.py | 9 ----- tests/custom_columns/models.py | 3 -- tests/custom_lookups/models.py | 3 -- tests/custom_managers/models.py | 8 ---- tests/custom_methods/models.py | 2 - tests/custom_pk/fields.py | 2 - tests/custom_pk/models.py | 4 -- tests/datatypes/models.py | 2 - tests/dates/models.py | 3 -- tests/datetimes/models.py | 3 -- tests/db_functions/models.py | 5 --- tests/defer/models.py | 2 - tests/defer_regress/models.py | 4 -- tests/delete/models.py | 2 - tests/distinct_on_fields/models.py | 5 --- tests/expressions/models.py | 8 ---- tests/expressions_case/models.py | 5 --- tests/extra_regress/models.py | 3 -- tests/field_defaults/models.py | 2 - tests/fixtures/models.py | 8 ---- .../fixtures_model_package/models/__init__.py | 2 - tests/fixtures_regress/models.py | 10 ----- tests/foreign_object/models/article.py | 2 - tests/foreign_object/models/empty_join.py | 2 - tests/foreign_object/models/person.py | 5 --- tests/forms_tests/models.py | 3 -- .../forms_tests/tests/test_error_messages.py | 2 - tests/forms_tests/tests/test_forms.py | 3 +- tests/forms_tests/tests/test_utils.py | 3 +- .../widget_tests/test_clearablefileinput.py | 6 --- tests/from_db_value/models.py | 2 - tests/generic_inline_admin/models.py | 2 - tests/generic_relations/models.py | 6 --- tests/generic_relations_regress/models.py | 8 ---- tests/generic_views/models.py | 4 -- tests/get_object_or_404/models.py | 3 -- tests/get_or_create/models.py | 2 - tests/gis_tests/distapp/models.py | 2 - tests/gis_tests/geo3d/models.py | 2 - tests/gis_tests/geoadmin/models.py | 2 - tests/gis_tests/geoapp/models.py | 2 - tests/gis_tests/geogapp/models.py | 2 - tests/gis_tests/layermap/models.py | 2 - tests/gis_tests/relatedapp/models.py | 4 -- tests/inline_formsets/models.py | 3 -- tests/introspection/models.py | 5 --- tests/lookup/models.py | 5 --- tests/m2m_and_m2o/models.py | 2 - tests/m2m_intermediary/models.py | 4 -- tests/m2m_multiple/models.py | 3 -- tests/m2m_recursive/models.py | 2 - tests/m2m_regress/models.py | 6 --- tests/m2m_signals/models.py | 4 -- tests/m2m_through/models.py | 8 ---- tests/m2m_through_regress/models.py | 8 ---- tests/m2o_recursive/models.py | 3 -- tests/managers_regress/models.py | 10 +---- tests/many_to_many/models.py | 4 -- tests/many_to_one/models.py | 7 ---- tests/many_to_one_null/models.py | 3 -- tests/migrations/models.py | 2 - tests/model_forms/models.py | 17 -------- tests/model_formsets/models.py | 19 --------- tests/model_formsets_regress/models.py | 2 - tests/model_inheritance/models.py | 9 ----- tests/model_inheritance_regress/models.py | 11 ------ tests/model_regress/models.py | 5 --- tests/modeladmin/models.py | 2 - tests/multiple_database/models.py | 5 --- tests/null_fk/models.py | 3 -- tests/null_fk_ordering/models.py | 4 -- tests/null_queries/models.py | 3 -- tests/one_to_one/models.py | 7 ---- tests/or_lookups/models.py | 2 - tests/order_with_respect_to/models.py | 3 -- tests/ordering/models.py | 2 - tests/pagination/models.py | 2 - tests/prefetch_related/models.py | 11 ------ tests/proxy_models/models.py | 6 --- tests/queries/models.py | 39 ------------------- tests/reserved_names/models.py | 2 - tests/reverse_lookup/models.py | 4 -- tests/save_delete_hooks/models.py | 2 - tests/schema/models.py | 2 - tests/select_related/models.py | 14 ------- tests/select_related_onetoone/models.py | 10 ----- tests/select_related_regress/models.py | 8 ---- tests/serializers/models/base.py | 10 ----- tests/signals/models.py | 5 --- tests/sites_framework/models.py | 2 - tests/str/models.py | 2 - tests/str/tests.py | 8 +--- tests/string_lookup/models.py | 7 ---- tests/syndication_tests/models.py | 3 -- .../filter_tests/test_unordered_list.py | 3 -- tests/template_tests/utils.py | 4 -- tests/test_utils/models.py | 4 -- tests/transaction_hooks/models.py | 2 - tests/transactions/models.py | 2 - tests/unmanaged_models/models.py | 7 ---- tests/update/models.py | 3 -- tests/update_only_fields/models.py | 3 -- tests/validation/models.py | 2 - tests/view_tests/models.py | 3 -- 160 files changed, 23 insertions(+), 757 deletions(-) diff --git a/django/contrib/admin/models.py b/django/contrib/admin/models.py index 724209dd0d..e3483a85b2 100644 --- a/django/contrib/admin/models.py +++ b/django/contrib/admin/models.py @@ -6,7 +6,7 @@ from django.contrib.contenttypes.models import ContentType from django.db import models from django.urls import NoReverseMatch, reverse from django.utils import timezone -from django.utils.encoding import force_text, python_2_unicode_compatible +from django.utils.encoding import force_text from django.utils.text import get_text_list from django.utils.translation import ugettext, ugettext_lazy as _ @@ -31,7 +31,6 @@ class LogEntryManager(models.Manager): ) -@python_2_unicode_compatible class LogEntry(models.Model): action_time = models.DateTimeField( _('action time'), diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index edde9077ac..bb871513d7 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -38,7 +38,7 @@ from django.template.response import SimpleTemplateResponse, TemplateResponse from django.urls import reverse from django.utils import six from django.utils.decorators import method_decorator -from django.utils.encoding import force_text, python_2_unicode_compatible +from django.utils.encoding import force_text from django.utils.html import format_html from django.utils.http import urlencode, urlquote from django.utils.safestring import mark_safe @@ -480,7 +480,6 @@ class BaseModelAdmin(six.with_metaclass(forms.MediaDefiningClass)): return request.user.has_module_perms(self.opts.app_label) -@python_2_unicode_compatible class ModelAdmin(BaseModelAdmin): "Encapsulates all admin options and functionality for a given model." diff --git a/django/contrib/auth/base_user.py b/django/contrib/auth/base_user.py index c6f4c9665c..4ec18bee17 100644 --- a/django/contrib/auth/base_user.py +++ b/django/contrib/auth/base_user.py @@ -10,7 +10,7 @@ from django.contrib.auth.hashers import ( ) from django.db import models from django.utils.crypto import get_random_string, salted_hmac -from django.utils.encoding import force_text, python_2_unicode_compatible +from django.utils.encoding import force_text from django.utils.translation import ugettext_lazy as _ @@ -45,7 +45,6 @@ class BaseUserManager(models.Manager): return self.get(**{self.model.USERNAME_FIELD: username}) -@python_2_unicode_compatible class AbstractBaseUser(models.Model): password = models.CharField(_('password'), max_length=128) last_login = models.DateTimeField(_('last login'), blank=True, null=True) diff --git a/django/contrib/auth/models.py b/django/contrib/auth/models.py index 2e9f3682d7..51b0d8fa63 100644 --- a/django/contrib/auth/models.py +++ b/django/contrib/auth/models.py @@ -7,7 +7,6 @@ from django.core.mail import send_mail from django.db import models from django.db.models.manager import EmptyManager from django.utils import six, timezone -from django.utils.encoding import python_2_unicode_compatible from django.utils.translation import ugettext_lazy as _ from .validators import ASCIIUsernameValidator, UnicodeUsernameValidator @@ -35,7 +34,6 @@ class PermissionManager(models.Manager): ) -@python_2_unicode_compatible class Permission(models.Model): """ The permissions system provides a way to assign permissions to specific @@ -96,7 +94,6 @@ class GroupManager(models.Manager): return self.get(name=name) -@python_2_unicode_compatible class Group(models.Model): """ Groups are a generic way of categorizing users to apply permissions, or @@ -374,7 +371,6 @@ class User(AbstractUser): swappable = 'AUTH_USER_MODEL' -@python_2_unicode_compatible class AnonymousUser(object): id = None pk = None diff --git a/django/contrib/contenttypes/fields.py b/django/contrib/contenttypes/fields.py index 83e38af441..d2812e5d2a 100644 --- a/django/contrib/contenttypes/fields.py +++ b/django/contrib/contenttypes/fields.py @@ -11,11 +11,10 @@ from django.db.models.fields.related import ( lazy_related_operation, ) from django.db.models.query_utils import PathInfo -from django.utils.encoding import force_text, python_2_unicode_compatible +from django.utils.encoding import force_text from django.utils.functional import cached_property -@python_2_unicode_compatible class GenericForeignKey(object): """ Provide a generic many-to-one relation through the ``content_type`` and diff --git a/django/contrib/contenttypes/models.py b/django/contrib/contenttypes/models.py index 6db6831fbc..9fe4a56767 100644 --- a/django/contrib/contenttypes/models.py +++ b/django/contrib/contenttypes/models.py @@ -2,7 +2,7 @@ from collections import defaultdict from django.apps import apps from django.db import models -from django.utils.encoding import force_text, python_2_unicode_compatible +from django.utils.encoding import force_text from django.utils.translation import ugettext_lazy as _ @@ -133,7 +133,6 @@ class ContentTypeManager(models.Manager): self._cache.setdefault(using, {})[ct.id] = ct -@python_2_unicode_compatible class ContentType(models.Model): app_label = models.CharField(max_length=100) model = models.CharField(_('python model class name'), max_length=100) diff --git a/django/contrib/flatpages/models.py b/django/contrib/flatpages/models.py index 02c93d657d..38cc9fd0fe 100644 --- a/django/contrib/flatpages/models.py +++ b/django/contrib/flatpages/models.py @@ -1,11 +1,10 @@ from django.contrib.sites.models import Site from django.db import models from django.urls import get_script_prefix -from django.utils.encoding import iri_to_uri, python_2_unicode_compatible +from django.utils.encoding import iri_to_uri from django.utils.translation import ugettext_lazy as _ -@python_2_unicode_compatible class FlatPage(models.Model): url = models.CharField(_('URL'), max_length=100, db_index=True) title = models.CharField(_('title'), max_length=200) diff --git a/django/contrib/gis/db/backends/base/models.py b/django/contrib/gis/db/backends/base/models.py index 8ae9f2b126..8c8bdc6346 100644 --- a/django/contrib/gis/db/backends/base/models.py +++ b/django/contrib/gis/db/backends/base/models.py @@ -1,9 +1,7 @@ from django.contrib.gis import gdal from django.utils import six -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class SpatialRefSysMixin(object): """ The SpatialRefSysMixin is a class used by the database-dependent diff --git a/django/contrib/gis/db/backends/oracle/models.py b/django/contrib/gis/db/backends/oracle/models.py index e1bf49050b..13fbbcba4f 100644 --- a/django/contrib/gis/db/backends/oracle/models.py +++ b/django/contrib/gis/db/backends/oracle/models.py @@ -9,10 +9,8 @@ """ from django.contrib.gis.db import models from django.contrib.gis.db.backends.base.models import SpatialRefSysMixin -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class OracleGeometryColumns(models.Model): "Maps to the Oracle USER_SDO_GEOM_METADATA table." table_name = models.CharField(max_length=32) diff --git a/django/contrib/gis/db/backends/postgis/models.py b/django/contrib/gis/db/backends/postgis/models.py index ddb3be1e5e..60090df99d 100644 --- a/django/contrib/gis/db/backends/postgis/models.py +++ b/django/contrib/gis/db/backends/postgis/models.py @@ -3,10 +3,8 @@ """ from django.contrib.gis.db.backends.base.models import SpatialRefSysMixin from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class PostGISGeometryColumns(models.Model): """ The 'geometry_columns' view from PostGIS. See the PostGIS diff --git a/django/contrib/gis/db/backends/spatialite/models.py b/django/contrib/gis/db/backends/spatialite/models.py index 7dca8896ee..82fed9fd19 100644 --- a/django/contrib/gis/db/backends/spatialite/models.py +++ b/django/contrib/gis/db/backends/spatialite/models.py @@ -3,10 +3,8 @@ """ from django.contrib.gis.db.backends.base.models import SpatialRefSysMixin from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class SpatialiteGeometryColumns(models.Model): """ The 'geometry_columns' table from SpatiaLite. diff --git a/django/contrib/gis/gdal/raster/source.py b/django/contrib/gis/gdal/raster/source.py index 4aea283dd8..f3a565ddc8 100644 --- a/django/contrib/gis/gdal/raster/source.py +++ b/django/contrib/gis/gdal/raster/source.py @@ -11,9 +11,7 @@ from django.contrib.gis.gdal.raster.const import GDAL_RESAMPLE_ALGORITHMS from django.contrib.gis.gdal.srs import SpatialReference, SRSException from django.contrib.gis.geometry.regex import json_regex from django.utils import six -from django.utils.encoding import ( - force_bytes, force_text, python_2_unicode_compatible, -) +from django.utils.encoding import force_bytes, force_text from django.utils.functional import cached_property @@ -52,7 +50,6 @@ class TransformPoint(list): self._raster.geotransform = gtf -@python_2_unicode_compatible class GDALRaster(GDALBase): """ Wraps a raster GDAL Data Source object. diff --git a/django/contrib/messages/storage/base.py b/django/contrib/messages/storage/base.py index 2273e97207..66cd41684b 100644 --- a/django/contrib/messages/storage/base.py +++ b/django/contrib/messages/storage/base.py @@ -1,11 +1,10 @@ from django.conf import settings from django.contrib.messages import constants, utils -from django.utils.encoding import force_text, python_2_unicode_compatible +from django.utils.encoding import force_text LEVEL_TAGS = utils.get_level_tags() -@python_2_unicode_compatible class Message(object): """ Represents an actual message that can be stored in any of the supported diff --git a/django/contrib/redirects/models.py b/django/contrib/redirects/models.py index a52a89d642..7a876ec76b 100644 --- a/django/contrib/redirects/models.py +++ b/django/contrib/redirects/models.py @@ -1,10 +1,8 @@ from django.contrib.sites.models import Site from django.db import models -from django.utils.encoding import python_2_unicode_compatible from django.utils.translation import ugettext_lazy as _ -@python_2_unicode_compatible class Redirect(models.Model): site = models.ForeignKey(Site, models.CASCADE, verbose_name=_('site')) old_path = models.CharField( diff --git a/django/contrib/sessions/base_session.py b/django/contrib/sessions/base_session.py index bd8e957aea..e9cdcfe1c6 100644 --- a/django/contrib/sessions/base_session.py +++ b/django/contrib/sessions/base_session.py @@ -3,7 +3,6 @@ This module allows importing AbstractBaseSession even when django.contrib.sessions is not in INSTALLED_APPS. """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible from django.utils.translation import ugettext_lazy as _ @@ -24,7 +23,6 @@ class BaseSessionManager(models.Manager): return s -@python_2_unicode_compatible class AbstractBaseSession(models.Model): session_key = models.CharField(_('session key'), max_length=40, primary_key=True) session_data = models.TextField(_('session data')) diff --git a/django/contrib/sites/models.py b/django/contrib/sites/models.py index 9f849fa559..782453d35d 100644 --- a/django/contrib/sites/models.py +++ b/django/contrib/sites/models.py @@ -4,7 +4,6 @@ from django.core.exceptions import ImproperlyConfigured, ValidationError from django.db import models from django.db.models.signals import pre_delete, pre_save from django.http.request import split_domain_port -from django.utils.encoding import python_2_unicode_compatible from django.utils.translation import ugettext_lazy as _ SITE_CACHE = {} @@ -78,7 +77,6 @@ class SiteManager(models.Manager): return self.get(domain=domain) -@python_2_unicode_compatible class Site(models.Model): domain = models.CharField( diff --git a/django/contrib/sites/requests.py b/django/contrib/sites/requests.py index 81f2ba42d6..c5513d8358 100644 --- a/django/contrib/sites/requests.py +++ b/django/contrib/sites/requests.py @@ -1,7 +1,3 @@ -from django.utils.encoding import python_2_unicode_compatible - - -@python_2_unicode_compatible class RequestSite(object): """ A class that shares the primary interface of Site (i.e., it has diff --git a/django/core/checks/messages.py b/django/core/checks/messages.py index f1de41a63c..da198d72b9 100644 --- a/django/core/checks/messages.py +++ b/django/core/checks/messages.py @@ -1,4 +1,4 @@ -from django.utils.encoding import force_str, python_2_unicode_compatible +from django.utils.encoding import force_str # Levels DEBUG = 10 @@ -8,7 +8,6 @@ ERROR = 40 CRITICAL = 50 -@python_2_unicode_compatible class CheckMessage(object): def __init__(self, level, msg, hint=None, obj=None, id=None): diff --git a/django/core/files/base.py b/django/core/files/base.py index 7499629459..f797158881 100644 --- a/django/core/files/base.py +++ b/django/core/files/base.py @@ -3,12 +3,9 @@ from io import BytesIO, StringIO, UnsupportedOperation from django.core.files.utils import FileProxyMixin from django.utils import six -from django.utils.encoding import ( - force_bytes, force_str, force_text, python_2_unicode_compatible, -) +from django.utils.encoding import force_bytes, force_str, force_text -@python_2_unicode_compatible class File(FileProxyMixin): DEFAULT_CHUNK_SIZE = 64 * 2 ** 10 @@ -138,7 +135,6 @@ class File(FileProxyMixin): self.file.close() -@python_2_unicode_compatible class ContentFile(File): """ A File-like object that takes just raw content, rather than an actual file. diff --git a/django/core/files/uploadhandler.py b/django/core/files/uploadhandler.py index 748477c0fc..3741f372b2 100644 --- a/django/core/files/uploadhandler.py +++ b/django/core/files/uploadhandler.py @@ -8,7 +8,6 @@ from django.conf import settings from django.core.files.uploadedfile import ( InMemoryUploadedFile, TemporaryUploadedFile, ) -from django.utils.encoding import python_2_unicode_compatible from django.utils.module_loading import import_string __all__ = [ @@ -25,7 +24,6 @@ class UploadFileException(Exception): pass -@python_2_unicode_compatible class StopUpload(UploadFileException): """ This exception is raised when an upload must abort. diff --git a/django/db/migrations/exceptions.py b/django/db/migrations/exceptions.py index d3da26940f..7b2a6abc62 100644 --- a/django/db/migrations/exceptions.py +++ b/django/db/migrations/exceptions.py @@ -1,5 +1,4 @@ from django.db.utils import DatabaseError -from django.utils.encoding import python_2_unicode_compatible class AmbiguityError(Exception): @@ -44,7 +43,6 @@ class IrreversibleError(RuntimeError): pass -@python_2_unicode_compatible class NodeNotFoundError(LookupError): """ Raised when an attempt on a node is made that is not available in the graph. diff --git a/django/db/migrations/graph.py b/django/db/migrations/graph.py index 83422361c4..1729aa7b7a 100644 --- a/django/db/migrations/graph.py +++ b/django/db/migrations/graph.py @@ -6,7 +6,6 @@ from functools import total_ordering from django.db.migrations.state import ProjectState from django.utils import six from django.utils.datastructures import OrderedSet -from django.utils.encoding import python_2_unicode_compatible from .exceptions import CircularDependencyError, NodeNotFoundError @@ -18,7 +17,6 @@ RECURSION_DEPTH_WARNING = ( ) -@python_2_unicode_compatible @total_ordering class Node(object): """ @@ -102,7 +100,6 @@ class DummyNode(Node): raise NodeNotFoundError(self.error_message, self.key, origin=self.origin) -@python_2_unicode_compatible class MigrationGraph(object): """ Represents the digraph of all migrations in a project. diff --git a/django/db/migrations/migration.py b/django/db/migrations/migration.py index d8b993f725..d1a24d4361 100644 --- a/django/db/migrations/migration.py +++ b/django/db/migrations/migration.py @@ -1,10 +1,8 @@ from django.db.transaction import atomic -from django.utils.encoding import python_2_unicode_compatible from .exceptions import IrreversibleError -@python_2_unicode_compatible class Migration(object): """ The base class for all migrations. diff --git a/django/db/migrations/recorder.py b/django/db/migrations/recorder.py index 0dac81223d..7824228c97 100644 --- a/django/db/migrations/recorder.py +++ b/django/db/migrations/recorder.py @@ -1,7 +1,6 @@ from django.apps.registry import Apps from django.db import models from django.db.utils import DatabaseError -from django.utils.encoding import python_2_unicode_compatible from django.utils.timezone import now from .exceptions import MigrationSchemaMissing @@ -20,7 +19,6 @@ class MigrationRecorder(object): a row in the table always means a migration is applied. """ - @python_2_unicode_compatible class Migration(models.Model): app = models.CharField(max_length=255) name = models.CharField(max_length=255) diff --git a/django/db/models/base.py b/django/db/models/base.py index 2fbcf46a41..e18615d76d 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -27,9 +27,7 @@ from django.db.models.signals import ( ) from django.db.models.utils import make_model_tuple from django.utils import six -from django.utils.encoding import ( - force_str, force_text, python_2_unicode_compatible, -) +from django.utils.encoding import force_str, force_text from django.utils.functional import curry from django.utils.six.moves import zip from django.utils.text import capfirst, get_text_list @@ -37,7 +35,6 @@ from django.utils.translation import ugettext_lazy as _ from django.utils.version import get_version -@python_2_unicode_compatible class Deferred(object): def __repr__(self): return str('') diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index ddfcbb4f39..2e21a42672 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -25,9 +25,7 @@ from django.utils.dateparse import ( parse_date, parse_datetime, parse_duration, parse_time, ) from django.utils.duration import duration_string -from django.utils.encoding import ( - force_bytes, force_text, python_2_unicode_compatible, smart_text, -) +from django.utils.encoding import force_bytes, force_text, smart_text from django.utils.functional import Promise, cached_property, curry from django.utils.ipv6 import clean_ipv6_address from django.utils.itercompat import is_iterable @@ -91,7 +89,6 @@ def return_None(): @total_ordering -@python_2_unicode_compatible class Field(RegisterLookupMixin): """Base class for all field types""" diff --git a/django/db/models/manager.py b/django/db/models/manager.py index 5a8ad632d5..5b498d631b 100644 --- a/django/db/models/manager.py +++ b/django/db/models/manager.py @@ -5,10 +5,8 @@ from importlib import import_module from django.db import router from django.db.models.query import QuerySet from django.utils import six -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class BaseManager(object): # Tracks each time a Manager instance is created. Used to retain order. creation_counter = 0 diff --git a/django/db/models/options.py b/django/db/models/options.py index 943de0dd91..a4593d125a 100644 --- a/django/db/models/options.py +++ b/django/db/models/options.py @@ -16,7 +16,7 @@ from django.db.models.query_utils import PathInfo from django.utils import six from django.utils.datastructures import ImmutableList, OrderedSet from django.utils.deprecation import RemovedInDjango21Warning -from django.utils.encoding import force_text, python_2_unicode_compatible +from django.utils.encoding import force_text from django.utils.functional import cached_property from django.utils.text import camel_case_to_spaces, format_lazy from django.utils.translation import override @@ -67,7 +67,6 @@ def make_immutable_fields_list(name, data): return ImmutableList(data, warning=IMMUTABLE_WARNING % name) -@python_2_unicode_compatible class Options(object): FORWARD_PROPERTIES = { 'fields', 'many_to_many', 'concrete_fields', 'local_concrete_fields', diff --git a/django/forms/boundfield.py b/django/forms/boundfield.py index fa141b35ef..6faff6ffc9 100644 --- a/django/forms/boundfield.py +++ b/django/forms/boundfield.py @@ -5,7 +5,7 @@ from django.forms.utils import flatatt, pretty_name from django.forms.widgets import Textarea, TextInput from django.utils import six from django.utils.deprecation import RemovedInDjango21Warning -from django.utils.encoding import force_text, python_2_unicode_compatible +from django.utils.encoding import force_text from django.utils.functional import cached_property from django.utils.html import conditional_escape, format_html, html_safe from django.utils.inspect import func_supports_parameter @@ -16,7 +16,6 @@ __all__ = ('BoundField',) @html_safe -@python_2_unicode_compatible class BoundField(object): "A Field plus data" def __init__(self, form, field, name): @@ -253,7 +252,6 @@ class BoundField(object): @html_safe -@python_2_unicode_compatible class BoundWidget(object): """ A container class used for iterating over widgets. This is useful for diff --git a/django/forms/forms.py b/django/forms/forms.py index 0f1fbef6c8..3971893aa2 100644 --- a/django/forms/forms.py +++ b/django/forms/forms.py @@ -13,7 +13,7 @@ from django.forms.fields import Field, FileField from django.forms.utils import ErrorDict, ErrorList, pretty_name # NOQA from django.forms.widgets import Media, MediaDefiningClass from django.utils import six -from django.utils.encoding import force_text, python_2_unicode_compatible +from django.utils.encoding import force_text from django.utils.functional import cached_property from django.utils.html import conditional_escape, html_safe from django.utils.safestring import mark_safe @@ -59,7 +59,6 @@ class DeclarativeFieldsMetaclass(MediaDefiningClass): @html_safe -@python_2_unicode_compatible class BaseForm(object): # 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 diff --git a/django/forms/formsets.py b/django/forms/formsets.py index 1e5ec8ee6b..81788626e1 100644 --- a/django/forms/formsets.py +++ b/django/forms/formsets.py @@ -4,7 +4,6 @@ from django.forms.fields import BooleanField, IntegerField from django.forms.utils import ErrorList from django.forms.widgets import HiddenInput from django.utils import six -from django.utils.encoding import python_2_unicode_compatible from django.utils.functional import cached_property from django.utils.html import html_safe from django.utils.safestring import mark_safe @@ -46,7 +45,6 @@ class ManagementForm(Form): @html_safe -@python_2_unicode_compatible class BaseFormSet(object): """ A collection of instances of the same Form class. diff --git a/django/forms/utils.py b/django/forms/utils.py index 3e6991ea32..3a86f419df 100644 --- a/django/forms/utils.py +++ b/django/forms/utils.py @@ -4,7 +4,7 @@ import sys from django.conf import settings from django.core.exceptions import ValidationError # backwards compatibility from django.utils import six, timezone -from django.utils.encoding import force_text, python_2_unicode_compatible +from django.utils.encoding import force_text from django.utils.html import escape, format_html, format_html_join, html_safe from django.utils.translation import ugettext_lazy as _ @@ -48,7 +48,6 @@ def flatatt(attrs): @html_safe -@python_2_unicode_compatible class ErrorDict(dict): """ A collection of errors that knows how to display itself in various formats. @@ -81,7 +80,6 @@ class ErrorDict(dict): @html_safe -@python_2_unicode_compatible class ErrorList(UserList, list): """ A collection of errors that knows how to display itself in various formats. diff --git a/django/forms/widgets.py b/django/forms/widgets.py index 3ddad40ebb..c4bbb7fe4f 100644 --- a/django/forms/widgets.py +++ b/django/forms/widgets.py @@ -13,9 +13,7 @@ from django.forms.utils import to_current_timezone from django.templatetags.static import static from django.utils import datetime_safe, formats, six from django.utils.dates import MONTHS -from django.utils.encoding import ( - force_str, force_text, python_2_unicode_compatible, -) +from django.utils.encoding import force_str, force_text from django.utils.formats import get_format from django.utils.html import format_html, html_safe from django.utils.safestring import mark_safe @@ -38,7 +36,6 @@ MEDIA_TYPES = ('css', 'js') @html_safe -@python_2_unicode_compatible class Media(object): def __init__(self, media=None, **kwargs): if media: diff --git a/django/template/base.py b/django/template/base.py index 3aa7941879..aa30d2e2b3 100644 --- a/django/template/base.py +++ b/django/template/base.py @@ -57,9 +57,7 @@ from django.template.context import ( # NOQA: imported for backwards compatibil BaseContext, Context, ContextPopException, RequestContext, ) from django.utils import six -from django.utils.encoding import ( - force_str, force_text, python_2_unicode_compatible, -) +from django.utils.encoding import force_str, force_text from django.utils.formats import localize from django.utils.html import conditional_escape, escape from django.utils.inspect import getargspec @@ -115,7 +113,6 @@ class TemplateEncodingError(Exception): pass -@python_2_unicode_compatible class VariableDoesNotExist(Exception): def __init__(self, msg, params=()): diff --git a/django/test/html.py b/django/test/html.py index 94dc7f540e..fd78e6b713 100644 --- a/django/test/html.py +++ b/django/test/html.py @@ -5,7 +5,7 @@ Comparing two html documents. import re from django.utils import six -from django.utils.encoding import force_text, python_2_unicode_compatible +from django.utils.encoding import force_text from django.utils.html_parser import HTMLParseError, HTMLParser WHITESPACE = re.compile(r'\s+') @@ -15,7 +15,6 @@ def normalize_whitespace(string): return WHITESPACE.sub(' ', string) -@python_2_unicode_compatible class Element(object): def __init__(self, name, attributes): self.name = name @@ -139,7 +138,6 @@ class Element(object): return six.text_type(self) -@python_2_unicode_compatible class RootElement(Element): def __init__(self): super(RootElement, self).__init__(None, ()) diff --git a/docs/internals/contributing/writing-code/coding-style.txt b/docs/internals/contributing/writing-code/coding-style.txt index fe0a21c5a5..abed891d63 100644 --- a/docs/internals/contributing/writing-code/coding-style.txt +++ b/docs/internals/contributing/writing-code/coding-style.txt @@ -228,10 +228,6 @@ Model style first_name = models.CharField(max_length=20) last_name = models.CharField(max_length=40) -* If you define a ``__str__`` method (previously ``__unicode__`` before Python 3 - was supported), decorate the model class with - :func:`~django.utils.encoding.python_2_unicode_compatible`. - * The order of model inner classes and standard methods should be as follows (noting that these are not all required): diff --git a/docs/intro/tutorial02.txt b/docs/intro/tutorial02.txt index bd7e9c18ca..f7bf850309 100644 --- a/docs/intro/tutorial02.txt +++ b/docs/intro/tutorial02.txt @@ -452,15 +452,12 @@ of this object. Let's fix that by editing the ``Question`` model (in the :filename: polls/models.py from django.db import models - from django.utils.encoding import python_2_unicode_compatible - @python_2_unicode_compatible # only if you need to support Python 2 class Question(models.Model): # ... def __str__(self): return self.question_text - @python_2_unicode_compatible # only if you need to support Python 2 class Choice(models.Model): # ... def __str__(self): diff --git a/docs/ref/models/instances.txt b/docs/ref/models/instances.txt index 83f76f37ca..838a4bd4de 100644 --- a/docs/ref/models/instances.txt +++ b/docs/ref/models/instances.txt @@ -601,9 +601,7 @@ representation of the model from the ``__str__()`` method. For example:: from django.db import models - from django.utils.encoding import python_2_unicode_compatible - @python_2_unicode_compatible # only if you need to support Python 2 class Person(models.Model): first_name = models.CharField(max_length=50) last_name = models.CharField(max_length=50) @@ -611,9 +609,6 @@ For example:: def __str__(self): return '%s %s' % (self.first_name, self.last_name) -If you'd like compatibility with Python 2, you can decorate your model class -with :func:`~django.utils.encoding.python_2_unicode_compatible` as shown above. - ``__eq__()`` ------------ diff --git a/docs/ref/unicode.txt b/docs/ref/unicode.txt index 3c29be550d..c167fd55b3 100644 --- a/docs/ref/unicode.txt +++ b/docs/ref/unicode.txt @@ -258,33 +258,6 @@ is *always* the case, even if the data could fit into an ASCII bytestring. You can pass in bytestrings when creating a model or populating a field, and Django will convert it to Unicode when it needs to. -Choosing between ``__str__()`` and ``__unicode__()`` ----------------------------------------------------- - -.. note:: - - If you are on Python 3, you can skip this section because you'll always - create ``__str__()`` rather than ``__unicode__()``. If you'd like - compatibility with Python 2, you can decorate your model class with - :func:`~django.utils.encoding.python_2_unicode_compatible`. - -One consequence of using Unicode by default is that you have to take some care -when printing data from the model. - -In particular, rather than giving your model a ``__str__()`` method, we -recommended you implement a ``__unicode__()`` method. In the ``__unicode__()`` -method, you can quite safely return the values of all your fields without -having to worry about whether they fit into a bytestring or not. (The way -Python works, the result of ``__str__()`` is *always* a bytestring, even if you -accidentally try to return a Unicode object). - -You can still create a ``__str__()`` method on your models if you want, of -course, but you shouldn't need to do this unless you have a good reason. -Django's ``Model`` base class automatically provides a ``__str__()`` -implementation that calls ``__unicode__()`` and encodes the result into UTF-8. -This means you'll normally only need to implement a ``__unicode__()`` method -and let Django handle the coercion to a bytestring when required. - Taking care in ``get_absolute_url()`` ------------------------------------- diff --git a/docs/topics/python3.txt b/docs/topics/python3.txt index 9dd4d83732..5b40f57bd3 100644 --- a/docs/topics/python3.txt +++ b/docs/topics/python3.txt @@ -148,27 +148,6 @@ In Python 3, there's simply :meth:`~object.__str__`, which must return ``str`` (It is also possible to define :meth:`~object.__bytes__`, but Django applications have little use for that method, because they hardly ever deal with ``bytes``.) -Django provides a simple way to define :meth:`~object.__str__` and -` __unicode__()`_ methods that work on Python 2 and 3: you must -define a :meth:`~object.__str__` method returning text and to apply the -:func:`~django.utils.encoding.python_2_unicode_compatible` decorator. - -On Python 3, the decorator is a no-op. On Python 2, it defines appropriate -` __unicode__()`_ and :meth:`~object.__str__` methods (replacing the -original :meth:`~object.__str__` method in the process). Here's an example:: - - from __future__ import unicode_literals - from django.utils.encoding import python_2_unicode_compatible - - @python_2_unicode_compatible - class MyClass(object): - def __str__(self): - return "Instance of my class" - -This technique is the best match for Django's porting philosophy. - -For forwards compatibility, this decorator is available as of Django 1.4.2. - Finally, note that :meth:`~object.__repr__` must return a ``str`` on all versions of Python. diff --git a/tests/admin_changelist/models.py b/tests/admin_changelist/models.py index fb5f03cbd6..0abb061548 100644 --- a/tests/admin_changelist/models.py +++ b/tests/admin_changelist/models.py @@ -1,5 +1,4 @@ from django.db import models -from django.utils.encoding import python_2_unicode_compatible class Event(models.Model): @@ -27,7 +26,6 @@ class Band(models.Model): genres = models.ManyToManyField(Genre) -@python_2_unicode_compatible class Musician(models.Model): name = models.CharField(max_length=30) @@ -35,7 +33,6 @@ class Musician(models.Model): return self.name -@python_2_unicode_compatible class Group(models.Model): name = models.CharField(max_length=30) members = models.ManyToManyField(Musician, through='Membership') diff --git a/tests/admin_checks/models.py b/tests/admin_checks/models.py index 822d695e4d..3336ce878e 100644 --- a/tests/admin_checks/models.py +++ b/tests/admin_checks/models.py @@ -5,14 +5,12 @@ Tests of ModelAdmin system checks logic. from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType from django.db import models -from django.utils.encoding import python_2_unicode_compatible class Album(models.Model): title = models.CharField(max_length=150) -@python_2_unicode_compatible class Song(models.Model): title = models.CharField(max_length=150) album = models.ForeignKey(Album, models.CASCADE) diff --git a/tests/admin_custom_urls/models.py b/tests/admin_custom_urls/models.py index 5365ee34bd..840d9b9f38 100644 --- a/tests/admin_custom_urls/models.py +++ b/tests/admin_custom_urls/models.py @@ -4,10 +4,8 @@ from django.contrib import admin from django.db import models from django.http import HttpResponseRedirect from django.urls import reverse -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Action(models.Model): name = models.CharField(max_length=50, primary_key=True) description = models.CharField(max_length=70) diff --git a/tests/admin_filters/models.py b/tests/admin_filters/models.py index f508aa1f9b..d9ce5c7cfd 100644 --- a/tests/admin_filters/models.py +++ b/tests/admin_filters/models.py @@ -4,10 +4,8 @@ from django.contrib.contenttypes.fields import ( ) from django.contrib.contenttypes.models import ContentType from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Book(models.Model): title = models.CharField(max_length=50) year = models.PositiveIntegerField(null=True, blank=True) @@ -39,7 +37,6 @@ class Book(models.Model): return self.title -@python_2_unicode_compatible class Department(models.Model): code = models.CharField(max_length=4, unique=True) description = models.CharField(max_length=50, blank=True, null=True) @@ -48,7 +45,6 @@ class Department(models.Model): return self.description -@python_2_unicode_compatible class Employee(models.Model): department = models.ForeignKey(Department, models.CASCADE, to_field="code") name = models.CharField(max_length=100) @@ -57,7 +53,6 @@ class Employee(models.Model): return self.name -@python_2_unicode_compatible class TaggedItem(models.Model): tag = models.SlugField() content_type = models.ForeignKey(ContentType, models.CASCADE, related_name='tagged_items') @@ -68,7 +63,6 @@ class TaggedItem(models.Model): return self.tag -@python_2_unicode_compatible class Bookmark(models.Model): url = models.URLField() tags = GenericRelation(TaggedItem) diff --git a/tests/admin_inlines/models.py b/tests/admin_inlines/models.py index e78511aaab..31e692b60e 100644 --- a/tests/admin_inlines/models.py +++ b/tests/admin_inlines/models.py @@ -6,10 +6,8 @@ import random from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Parent(models.Model): name = models.CharField(max_length=50) @@ -17,7 +15,6 @@ class Parent(models.Model): return self.name -@python_2_unicode_compatible class Teacher(models.Model): name = models.CharField(max_length=50) @@ -25,7 +22,6 @@ class Teacher(models.Model): return self.name -@python_2_unicode_compatible class Child(models.Model): name = models.CharField(max_length=50) teacher = models.ForeignKey(Teacher, models.CASCADE) diff --git a/tests/admin_utils/models.py b/tests/admin_utils/models.py index 87060cbff8..1af2f09411 100644 --- a/tests/admin_utils/models.py +++ b/tests/admin_utils/models.py @@ -1,10 +1,8 @@ from django.db import models from django.utils import six -from django.utils.encoding import python_2_unicode_compatible from django.utils.translation import ugettext_lazy as _ -@python_2_unicode_compatible class Site(models.Model): domain = models.CharField(max_length=100) @@ -34,7 +32,6 @@ class ArticleProxy(Article): proxy = True -@python_2_unicode_compatible class Count(models.Model): num = models.PositiveSmallIntegerField() parent = models.ForeignKey('self', models.CASCADE, null=True) diff --git a/tests/admin_views/models.py b/tests/admin_views/models.py index 54d8f5f968..89373f6ed3 100644 --- a/tests/admin_views/models.py +++ b/tests/admin_views/models.py @@ -11,10 +11,8 @@ from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ValidationError from django.core.files.storage import FileSystemStorage from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Section(models.Model): """ A simple section that links to articles, to test linking to related items @@ -33,7 +31,6 @@ class Section(models.Model): return self.name -@python_2_unicode_compatible class Article(models.Model): """ A simple article to test admin views. Test backwards compatibility. @@ -59,7 +56,6 @@ class Article(models.Model): model_year_reversed.short_description = '' -@python_2_unicode_compatible class Book(models.Model): """ A simple book that has chapters. @@ -70,7 +66,6 @@ class Book(models.Model): return self.name -@python_2_unicode_compatible class Promo(models.Model): name = models.CharField(max_length=100, verbose_name='¿Name?') book = models.ForeignKey(Book, models.CASCADE) @@ -79,7 +74,6 @@ class Promo(models.Model): return self.name -@python_2_unicode_compatible class Chapter(models.Model): title = models.CharField(max_length=100, verbose_name='¿Title?') content = models.TextField() @@ -93,7 +87,6 @@ class Chapter(models.Model): verbose_name = '¿Chapter?' -@python_2_unicode_compatible class ChapterXtra1(models.Model): chap = models.OneToOneField(Chapter, models.CASCADE, verbose_name='¿Chap?') xtra = models.CharField(max_length=100, verbose_name='¿Xtra?') @@ -102,7 +95,6 @@ class ChapterXtra1(models.Model): return '¿Xtra1: %s' % self.xtra -@python_2_unicode_compatible class ChapterXtra2(models.Model): chap = models.OneToOneField(Chapter, models.CASCADE, verbose_name='¿Chap?') xtra = models.CharField(max_length=100, verbose_name='¿Xtra?') @@ -120,7 +112,6 @@ class CustomArticle(models.Model): date = models.DateTimeField() -@python_2_unicode_compatible class ModelWithStringPrimaryKey(models.Model): string_pk = models.CharField(max_length=255, primary_key=True) @@ -131,7 +122,6 @@ class ModelWithStringPrimaryKey(models.Model): return '/dummy/%s/' % self.string_pk -@python_2_unicode_compatible class Color(models.Model): value = models.CharField(max_length=10) warm = models.BooleanField(default=False) @@ -146,7 +136,6 @@ class Color2(Color): proxy = True -@python_2_unicode_compatible class Thing(models.Model): title = models.CharField(max_length=20) color = models.ForeignKey(Color, models.CASCADE, limit_choices_to={'warm': True}) @@ -156,7 +145,6 @@ class Thing(models.Model): return self.title -@python_2_unicode_compatible class Actor(models.Model): name = models.CharField(max_length=50) age = models.IntegerField() @@ -166,7 +154,6 @@ class Actor(models.Model): return self.name -@python_2_unicode_compatible class Inquisition(models.Model): expected = models.BooleanField(default=False) leader = models.ForeignKey(Actor, models.CASCADE) @@ -176,7 +163,6 @@ class Inquisition(models.Model): return "by %s from %s" % (self.leader, self.country) -@python_2_unicode_compatible class Sketch(models.Model): title = models.CharField(max_length=100) inquisition = models.ForeignKey( @@ -213,7 +199,6 @@ def today_callable_q(): return models.Q(last_action__gte=datetime.datetime.today()) -@python_2_unicode_compatible class Character(models.Model): username = models.CharField(max_length=100) last_action = models.DateTimeField() @@ -222,7 +207,6 @@ class Character(models.Model): return self.username -@python_2_unicode_compatible class StumpJoke(models.Model): variation = models.CharField(max_length=100) most_recently_fooled = models.ForeignKey( @@ -248,7 +232,6 @@ class Fabric(models.Model): surface = models.CharField(max_length=20, choices=NG_CHOICES) -@python_2_unicode_compatible class Person(models.Model): GENDER_CHOICES = ( (1, "Male"), @@ -263,7 +246,6 @@ class Person(models.Model): return self.name -@python_2_unicode_compatible class Persona(models.Model): """ A simple persona associated with accounts, to test inlining of related @@ -275,7 +257,6 @@ class Persona(models.Model): return self.name -@python_2_unicode_compatible class Account(models.Model): """ A simple, generic account encapsulating the information shared by all @@ -299,7 +280,6 @@ class BarAccount(Account): servicename = 'bar' -@python_2_unicode_compatible class Subscriber(models.Model): name = models.CharField(blank=False, max_length=80) email = models.EmailField(blank=False, max_length=175) @@ -349,7 +329,6 @@ class Child(models.Model): raise ValidationError('invalid') -@python_2_unicode_compatible class EmptyModel(models.Model): def __str__(self): return "Primary key = %s" % self.id @@ -433,7 +412,6 @@ class FancyDoodad(Doodad): expensive = models.BooleanField(default=True) -@python_2_unicode_compatible class Category(models.Model): collector = models.ForeignKey(Collector, models.CASCADE) order = models.PositiveIntegerField() @@ -489,7 +467,6 @@ class FieldOverridePost(Post): proxy = True -@python_2_unicode_compatible class Gadget(models.Model): name = models.CharField(max_length=100) @@ -497,7 +474,6 @@ class Gadget(models.Model): return self.name -@python_2_unicode_compatible class Villain(models.Model): name = models.CharField(max_length=100) @@ -509,7 +485,6 @@ class SuperVillain(Villain): pass -@python_2_unicode_compatible class FunkyTag(models.Model): "Because we all know there's only one real use case for GFKs." name = models.CharField(max_length=25) @@ -521,7 +496,6 @@ class FunkyTag(models.Model): return self.name -@python_2_unicode_compatible class Plot(models.Model): name = models.CharField(max_length=100) team_leader = models.ForeignKey(Villain, models.CASCADE, related_name='lead_plots') @@ -532,7 +506,6 @@ class Plot(models.Model): return self.name -@python_2_unicode_compatible class PlotDetails(models.Model): details = models.CharField(max_length=100) plot = models.OneToOneField(Plot, models.CASCADE, null=True, blank=True) @@ -546,7 +519,6 @@ class PlotProxy(Plot): proxy = True -@python_2_unicode_compatible class SecretHideout(models.Model): """ Secret! Not registered with the admin! """ location = models.CharField(max_length=100) @@ -556,7 +528,6 @@ class SecretHideout(models.Model): return self.location -@python_2_unicode_compatible class SuperSecretHideout(models.Model): """ Secret! Not registered with the admin! """ location = models.CharField(max_length=100) @@ -566,7 +537,6 @@ class SuperSecretHideout(models.Model): return self.location -@python_2_unicode_compatible class Bookmark(models.Model): name = models.CharField(max_length=60) tag = GenericRelation(FunkyTag, related_query_name='bookmark') @@ -575,7 +545,6 @@ class Bookmark(models.Model): return self.name -@python_2_unicode_compatible class CyclicOne(models.Model): name = models.CharField(max_length=25) two = models.ForeignKey('CyclicTwo', models.CASCADE) @@ -584,7 +553,6 @@ class CyclicOne(models.Model): return self.name -@python_2_unicode_compatible class CyclicTwo(models.Model): name = models.CharField(max_length=25) one = models.ForeignKey(CyclicOne, models.CASCADE) @@ -593,7 +561,6 @@ class CyclicTwo(models.Model): return self.name -@python_2_unicode_compatible class Topping(models.Model): name = models.CharField(max_length=20) @@ -625,7 +592,6 @@ class Question(models.Model): posted = models.DateField(default=datetime.date.today) -@python_2_unicode_compatible class Answer(models.Model): question = models.ForeignKey(Question, models.PROTECT) answer = models.CharField(max_length=20) @@ -660,7 +626,6 @@ class FoodDelivery(models.Model): unique_together = (("driver", "restaurant"),) -@python_2_unicode_compatible class CoverLetter(models.Model): author = models.CharField(max_length=30) date_written = models.DateField(null=True, blank=True) @@ -679,7 +644,6 @@ class ShortMessage(models.Model): timestamp = models.DateTimeField(null=True, blank=True) -@python_2_unicode_compatible class Telegram(models.Model): title = models.CharField(max_length=30) date_sent = models.DateField(null=True, blank=True) @@ -745,7 +709,6 @@ class AdminOrderedCallable(models.Model): stuff = models.CharField(max_length=200) -@python_2_unicode_compatible class Report(models.Model): title = models.CharField(max_length=100) diff --git a/tests/admin_widgets/models.py b/tests/admin_widgets/models.py index 43aa88e254..fcc86ddeb8 100644 --- a/tests/admin_widgets/models.py +++ b/tests/admin_widgets/models.py @@ -1,13 +1,11 @@ from django.contrib.auth.models import User from django.db import models -from django.utils.encoding import python_2_unicode_compatible class MyFileField(models.FileField): pass -@python_2_unicode_compatible class Member(models.Model): name = models.CharField(max_length=100) birthdate = models.DateTimeField(blank=True, null=True) @@ -18,7 +16,6 @@ class Member(models.Model): return self.name -@python_2_unicode_compatible class Band(models.Model): name = models.CharField(max_length=100) style = models.CharField(max_length=20) @@ -28,7 +25,6 @@ class Band(models.Model): return self.name -@python_2_unicode_compatible class Album(models.Model): band = models.ForeignKey(Band, models.CASCADE) name = models.CharField(max_length=100) @@ -44,7 +40,6 @@ class HiddenInventoryManager(models.Manager): return super(HiddenInventoryManager, self).get_queryset().filter(hidden=False) -@python_2_unicode_compatible class Inventory(models.Model): barcode = models.PositiveIntegerField(unique=True) parent = models.ForeignKey('self', models.SET_NULL, to_field='barcode', blank=True, null=True) @@ -79,7 +74,6 @@ class Event(models.Model): min_age = models.IntegerField(blank=True, null=True) -@python_2_unicode_compatible class Car(models.Model): owner = models.ForeignKey(User, models.CASCADE) make = models.CharField(max_length=30) @@ -134,7 +128,6 @@ class Advisor(models.Model): companies = models.ManyToManyField(Company) -@python_2_unicode_compatible class Student(models.Model): name = models.CharField(max_length=255) @@ -145,7 +138,6 @@ class Student(models.Model): ordering = ('name',) -@python_2_unicode_compatible class School(models.Model): name = models.CharField(max_length=255) students = models.ManyToManyField(Student, related_name='current_schools') @@ -155,7 +147,6 @@ class School(models.Model): return self.name -@python_2_unicode_compatible class Profile(models.Model): user = models.ForeignKey('auth.User', models.CASCADE, to_field='username') diff --git a/tests/aggregation/models.py b/tests/aggregation/models.py index 37421dbb81..fd441fe51d 100644 --- a/tests/aggregation/models.py +++ b/tests/aggregation/models.py @@ -1,8 +1,6 @@ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Author(models.Model): name = models.CharField(max_length=100) age = models.IntegerField() @@ -12,7 +10,6 @@ class Author(models.Model): return self.name -@python_2_unicode_compatible class Publisher(models.Model): name = models.CharField(max_length=255) num_awards = models.IntegerField() @@ -22,7 +19,6 @@ class Publisher(models.Model): return self.name -@python_2_unicode_compatible class Book(models.Model): isbn = models.CharField(max_length=9) name = models.CharField(max_length=255) @@ -38,7 +34,6 @@ class Book(models.Model): return self.name -@python_2_unicode_compatible class Store(models.Model): name = models.CharField(max_length=255) books = models.ManyToManyField(Book) diff --git a/tests/aggregation_regress/models.py b/tests/aggregation_regress/models.py index a9ab1cbdce..3498cbf168 100644 --- a/tests/aggregation_regress/models.py +++ b/tests/aggregation_regress/models.py @@ -3,10 +3,8 @@ from django.contrib.contenttypes.fields import ( ) from django.contrib.contenttypes.models import ContentType from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Author(models.Model): name = models.CharField(max_length=100) age = models.IntegerField() @@ -16,7 +14,6 @@ class Author(models.Model): return self.name -@python_2_unicode_compatible class Publisher(models.Model): name = models.CharField(max_length=255) num_awards = models.IntegerField() @@ -32,7 +29,6 @@ class ItemTag(models.Model): content_object = GenericForeignKey('content_type', 'object_id') -@python_2_unicode_compatible class Book(models.Model): isbn = models.CharField(max_length=9) name = models.CharField(max_length=255) @@ -52,7 +48,6 @@ class Book(models.Model): return self.name -@python_2_unicode_compatible class Store(models.Model): name = models.CharField(max_length=255) books = models.ManyToManyField(Book) @@ -83,7 +78,6 @@ class WithManualPK(models.Model): id = models.IntegerField(primary_key=True) -@python_2_unicode_compatible class HardbackBook(Book): weight = models.FloatField() diff --git a/tests/annotations/models.py b/tests/annotations/models.py index 79648ffd96..4aeda3c093 100644 --- a/tests/annotations/models.py +++ b/tests/annotations/models.py @@ -1,8 +1,6 @@ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Author(models.Model): name = models.CharField(max_length=100) age = models.IntegerField() @@ -12,7 +10,6 @@ class Author(models.Model): return self.name -@python_2_unicode_compatible class Publisher(models.Model): name = models.CharField(max_length=255) num_awards = models.IntegerField() @@ -21,7 +18,6 @@ class Publisher(models.Model): return self.name -@python_2_unicode_compatible class Book(models.Model): isbn = models.CharField(max_length=9) name = models.CharField(max_length=255) @@ -37,7 +33,6 @@ class Book(models.Model): return self.name -@python_2_unicode_compatible class Store(models.Model): name = models.CharField(max_length=255) books = models.ManyToManyField(Book) @@ -48,7 +43,6 @@ class Store(models.Model): return self.name -@python_2_unicode_compatible class DepartmentStore(Store): chain = models.CharField(max_length=255) @@ -56,7 +50,6 @@ class DepartmentStore(Store): return '%s - %s ' % (self.chain, self.name) -@python_2_unicode_compatible class Employee(models.Model): # The order of these fields matter, do not change. Certain backends # rely on field ordering to perform database conversions, and this @@ -72,7 +65,6 @@ class Employee(models.Model): return '%s %s' % (self.first_name, self.last_name) -@python_2_unicode_compatible class Company(models.Model): name = models.CharField(max_length=200) motto = models.CharField(max_length=200, null=True, blank=True) @@ -85,7 +77,6 @@ class Company(models.Model): ) -@python_2_unicode_compatible class Ticket(models.Model): active_at = models.DateTimeField() duration = models.DurationField() diff --git a/tests/auth_tests/models/custom_permissions.py b/tests/auth_tests/models/custom_permissions.py index a6c5a1e96a..73c10e5040 100644 --- a/tests/auth_tests/models/custom_permissions.py +++ b/tests/auth_tests/models/custom_permissions.py @@ -5,7 +5,6 @@ includes everything that is needed to interact with the ModelBackend. """ from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin from django.db import models -from django.utils.encoding import python_2_unicode_compatible from .custom_user import CustomUserManager, RemoveGroupsAndPermissions @@ -19,7 +18,6 @@ class CustomPermissionsUserManager(CustomUserManager): with RemoveGroupsAndPermissions(): - @python_2_unicode_compatible class CustomPermissionsUser(AbstractBaseUser, PermissionsMixin): email = models.EmailField(verbose_name='email address', max_length=255, unique=True) date_of_birth = models.DateField() diff --git a/tests/auth_tests/models/custom_user.py b/tests/auth_tests/models/custom_user.py index fac51064ba..049ae85e5c 100644 --- a/tests/auth_tests/models/custom_user.py +++ b/tests/auth_tests/models/custom_user.py @@ -3,7 +3,6 @@ from django.contrib.auth.models import ( PermissionsMixin, UserManager, ) from django.db import models -from django.utils.encoding import python_2_unicode_compatible # The custom user uses email as the unique identifier, and requires @@ -33,7 +32,6 @@ class CustomUserManager(BaseUserManager): return u -@python_2_unicode_compatible class CustomUser(AbstractBaseUser): email = models.EmailField(verbose_name='email address', max_length=255, unique=True) is_active = models.BooleanField(default=True) diff --git a/tests/backends/models.py b/tests/backends/models.py index 18423e1276..6277e52525 100644 --- a/tests/backends/models.py +++ b/tests/backends/models.py @@ -3,10 +3,8 @@ from django.contrib.contenttypes.fields import ( ) from django.contrib.contenttypes.models import ContentType from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Square(models.Model): root = models.IntegerField() square = models.PositiveIntegerField() @@ -15,7 +13,6 @@ class Square(models.Model): return "%s ** 2 == %s" % (self.root, self.square) -@python_2_unicode_compatible class Person(models.Model): first_name = models.CharField(max_length=20) last_name = models.CharField(max_length=20) @@ -52,7 +49,6 @@ class Post(models.Model): db_table = 'CaseSensitive_Post' -@python_2_unicode_compatible class Reporter(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) @@ -66,7 +62,6 @@ class ReporterProxy(Reporter): proxy = True -@python_2_unicode_compatible class Article(models.Model): headline = models.CharField(max_length=100) pub_date = models.DateField() @@ -82,7 +77,6 @@ class Article(models.Model): return self.headline -@python_2_unicode_compatible class Item(models.Model): name = models.CharField(max_length=30) date = models.DateField() @@ -93,7 +87,6 @@ class Item(models.Model): return self.name -@python_2_unicode_compatible class Object(models.Model): related_objects = models.ManyToManyField("self", db_constraint=False, symmetrical=False) @@ -101,7 +94,6 @@ class Object(models.Model): return str(self.id) -@python_2_unicode_compatible class ObjectReference(models.Model): obj = models.ForeignKey(Object, models.CASCADE, db_constraint=False) diff --git a/tests/basic/models.py b/tests/basic/models.py index a6010f1291..c08b147ac4 100644 --- a/tests/basic/models.py +++ b/tests/basic/models.py @@ -4,10 +4,8 @@ Bare-bones model This is a basic model with only two non-primary-key fields. """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Article(models.Model): headline = models.CharField(max_length=100, default='Default headline') pub_date = models.DateTimeField() @@ -25,7 +23,6 @@ class ArticleSelectOnSave(Article): select_on_save = True -@python_2_unicode_compatible class SelfRef(models.Model): selfref = models.ForeignKey( 'self', diff --git a/tests/choices/models.py b/tests/choices/models.py index 3384947f93..de68118386 100644 --- a/tests/choices/models.py +++ b/tests/choices/models.py @@ -10,7 +10,6 @@ field. This method returns the "human-readable" value of the field. """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible GENDER_CHOICES = ( ('M', 'Male'), @@ -18,7 +17,6 @@ GENDER_CHOICES = ( ) -@python_2_unicode_compatible class Person(models.Model): name = models.CharField(max_length=20) gender = models.CharField(max_length=1, choices=GENDER_CHOICES) diff --git a/tests/contenttypes_tests/models.py b/tests/contenttypes_tests/models.py index 1640ee3b8c..0aa8bbf0bc 100644 --- a/tests/contenttypes_tests/models.py +++ b/tests/contenttypes_tests/models.py @@ -4,11 +4,9 @@ from django.contrib.contenttypes.fields import ( from django.contrib.contenttypes.models import ContentType from django.contrib.sites.models import SiteManager from django.db import models -from django.utils.encoding import python_2_unicode_compatible from django.utils.http import urlquote -@python_2_unicode_compatible class Site(models.Model): domain = models.CharField(max_length=100) objects = SiteManager() @@ -17,7 +15,6 @@ class Site(models.Model): return self.domain -@python_2_unicode_compatible class Author(models.Model): name = models.CharField(max_length=100) @@ -28,7 +25,6 @@ class Author(models.Model): return '/authors/%s/' % self.id -@python_2_unicode_compatible class Article(models.Model): title = models.CharField(max_length=100) slug = models.SlugField() @@ -39,7 +35,6 @@ class Article(models.Model): return self.title -@python_2_unicode_compatible class SchemeIncludedURL(models.Model): url = models.URLField(max_length=100) @@ -59,7 +54,6 @@ class ProxyModel(ConcreteModel): proxy = True -@python_2_unicode_compatible class FooWithoutUrl(models.Model): """ Fake model not defining ``get_absolute_url`` for @@ -95,7 +89,6 @@ class Question(models.Model): answer_set = GenericRelation('Answer') -@python_2_unicode_compatible class Answer(models.Model): text = models.CharField(max_length=200) content_type = models.ForeignKey(ContentType, models.CASCADE) @@ -109,7 +102,6 @@ class Answer(models.Model): return self.text -@python_2_unicode_compatible class Post(models.Model): """An ordered tag on an item.""" title = models.CharField(max_length=200) @@ -125,7 +117,6 @@ class Post(models.Model): return self.title -@python_2_unicode_compatible class ModelWithNullFKToSite(models.Model): title = models.CharField(max_length=200) site = models.ForeignKey(Site, null=True, on_delete=models.CASCADE) diff --git a/tests/custom_columns/models.py b/tests/custom_columns/models.py index d5f5217ba5..32d55af9f3 100644 --- a/tests/custom_columns/models.py +++ b/tests/custom_columns/models.py @@ -16,10 +16,8 @@ from the default generated name, use the ``db_table`` parameter on the """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Author(models.Model): Author_ID = models.AutoField(primary_key=True, db_column='Author ID') first_name = models.CharField(max_length=30, db_column='firstname') @@ -33,7 +31,6 @@ class Author(models.Model): ordering = ('last_name', 'first_name') -@python_2_unicode_compatible class Article(models.Model): Article_ID = models.AutoField(primary_key=True, db_column='Article ID') headline = models.CharField(max_length=100) diff --git a/tests/custom_lookups/models.py b/tests/custom_lookups/models.py index 97979dd953..071858cd3d 100644 --- a/tests/custom_lookups/models.py +++ b/tests/custom_lookups/models.py @@ -1,8 +1,6 @@ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Author(models.Model): name = models.CharField(max_length=20) age = models.IntegerField(null=True) @@ -17,7 +15,6 @@ class Article(models.Model): author = models.ForeignKey(Author, on_delete=models.CASCADE) -@python_2_unicode_compatible class MySQLUnixTimestamp(models.Model): timestamp = models.PositiveIntegerField() diff --git a/tests/custom_managers/models.py b/tests/custom_managers/models.py index 1d47869af9..c5f224ea51 100644 --- a/tests/custom_managers/models.py +++ b/tests/custom_managers/models.py @@ -13,7 +13,6 @@ from django.contrib.contenttypes.fields import ( GenericForeignKey, GenericRelation, ) from django.db import models -from django.utils.encoding import python_2_unicode_compatible class PersonManager(models.Manager): @@ -86,7 +85,6 @@ class BoringPeopleManager(models.Manager): return super(BoringPeopleManager, self).get_queryset().filter(fun=False) -@python_2_unicode_compatible class Person(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) @@ -109,7 +107,6 @@ class Person(models.Model): return "%s %s" % (self.first_name, self.last_name) -@python_2_unicode_compatible class FunPerson(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) @@ -130,7 +127,6 @@ class FunPerson(models.Model): return "%s %s" % (self.first_name, self.last_name) -@python_2_unicode_compatible class Book(models.Model): title = models.CharField(max_length=50) author = models.CharField(max_length=30) @@ -158,7 +154,6 @@ class FastCarManager(models.Manager): return super(FastCarManager, self).get_queryset().filter(top_speed__gt=150) -@python_2_unicode_compatible class Car(models.Model): name = models.CharField(max_length=10) mileage = models.IntegerField() @@ -187,7 +182,6 @@ class RestrictedManager(models.Manager): return super(RestrictedManager, self).get_queryset().filter(is_public=True) -@python_2_unicode_compatible class RelatedModel(models.Model): name = models.CharField(max_length=50) @@ -195,7 +189,6 @@ class RelatedModel(models.Model): return self.name -@python_2_unicode_compatible class RestrictedModel(models.Model): name = models.CharField(max_length=50) is_public = models.BooleanField(default=False) @@ -208,7 +201,6 @@ class RestrictedModel(models.Model): return self.name -@python_2_unicode_compatible class OneToOneRestrictedModel(models.Model): name = models.CharField(max_length=50) is_public = models.BooleanField(default=False) diff --git a/tests/custom_methods/models.py b/tests/custom_methods/models.py index 7def1d6017..f44d1b8265 100644 --- a/tests/custom_methods/models.py +++ b/tests/custom_methods/models.py @@ -7,10 +7,8 @@ Any method you add to a model will be available to instances. import datetime from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Article(models.Model): headline = models.CharField(max_length=100) pub_date = models.DateField() diff --git a/tests/custom_pk/fields.py b/tests/custom_pk/fields.py index 3779fc6c43..eb63f66679 100644 --- a/tests/custom_pk/fields.py +++ b/tests/custom_pk/fields.py @@ -3,10 +3,8 @@ import string from django.db import models from django.utils import six -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class MyWrapper(object): def __init__(self, value): self.value = value diff --git a/tests/custom_pk/models.py b/tests/custom_pk/models.py index e0a318468c..0b272c1135 100644 --- a/tests/custom_pk/models.py +++ b/tests/custom_pk/models.py @@ -6,12 +6,10 @@ this behavior by explicitly adding ``primary_key=True`` to a field. """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible from .fields import MyAutoField -@python_2_unicode_compatible class Employee(models.Model): employee_code = models.IntegerField(primary_key=True, db_column='code') first_name = models.CharField(max_length=20) @@ -24,7 +22,6 @@ class Employee(models.Model): return "%s %s" % (self.first_name, self.last_name) -@python_2_unicode_compatible class Business(models.Model): name = models.CharField(max_length=20, primary_key=True) employees = models.ManyToManyField(Employee) @@ -36,7 +33,6 @@ class Business(models.Model): return self.name -@python_2_unicode_compatible class Bar(models.Model): id = MyAutoField(primary_key=True, db_index=True) diff --git a/tests/datatypes/models.py b/tests/datatypes/models.py index cabe5297bd..570b2ba8e0 100644 --- a/tests/datatypes/models.py +++ b/tests/datatypes/models.py @@ -4,10 +4,8 @@ types, which in the past were problematic for some database backends. """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Donut(models.Model): name = models.CharField(max_length=100) is_frosted = models.BooleanField(default=False) diff --git a/tests/dates/models.py b/tests/dates/models.py index 978cf44e95..74f9db28ad 100644 --- a/tests/dates/models.py +++ b/tests/dates/models.py @@ -1,9 +1,7 @@ from django.db import models from django.utils import timezone -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Article(models.Model): title = models.CharField(max_length=100) pub_date = models.DateField() @@ -15,7 +13,6 @@ class Article(models.Model): return self.title -@python_2_unicode_compatible class Comment(models.Model): article = models.ForeignKey(Article, models.CASCADE, related_name="comments") text = models.TextField() diff --git a/tests/datetimes/models.py b/tests/datetimes/models.py index 4d2ad9ac7a..c8b64ae52a 100644 --- a/tests/datetimes/models.py +++ b/tests/datetimes/models.py @@ -1,8 +1,6 @@ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Article(models.Model): title = models.CharField(max_length=100) pub_date = models.DateTimeField() @@ -14,7 +12,6 @@ class Article(models.Model): return self.title -@python_2_unicode_compatible class Comment(models.Model): article = models.ForeignKey(Article, models.CASCADE, related_name="comments") text = models.TextField() diff --git a/tests/db_functions/models.py b/tests/db_functions/models.py index 8d0fbc6deb..bfcdb7759e 100644 --- a/tests/db_functions/models.py +++ b/tests/db_functions/models.py @@ -2,10 +2,8 @@ Tests for built in Function expressions. """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Author(models.Model): name = models.CharField(max_length=50) alias = models.CharField(max_length=50, null=True, blank=True) @@ -16,7 +14,6 @@ class Author(models.Model): return self.name -@python_2_unicode_compatible class Article(models.Model): authors = models.ManyToManyField(Author, related_name='articles') title = models.CharField(max_length=50) @@ -31,7 +28,6 @@ class Article(models.Model): return self.title -@python_2_unicode_compatible class Fan(models.Model): name = models.CharField(max_length=50) age = models.PositiveSmallIntegerField(default=30) @@ -41,7 +37,6 @@ class Fan(models.Model): return self.name -@python_2_unicode_compatible class DTModel(models.Model): name = models.CharField(max_length=32) start_datetime = models.DateTimeField(null=True, blank=True) diff --git a/tests/defer/models.py b/tests/defer/models.py index b36b173501..dbdce0b025 100644 --- a/tests/defer/models.py +++ b/tests/defer/models.py @@ -3,7 +3,6 @@ Tests for defer() and only(). """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible class Secondary(models.Model): @@ -11,7 +10,6 @@ class Secondary(models.Model): second = models.CharField(max_length=50) -@python_2_unicode_compatible class Primary(models.Model): name = models.CharField(max_length=50) value = models.CharField(max_length=50) diff --git a/tests/defer_regress/models.py b/tests/defer_regress/models.py index a73f539ba1..55eac8c537 100644 --- a/tests/defer_regress/models.py +++ b/tests/defer_regress/models.py @@ -3,10 +3,8 @@ Regression tests for defer() / only() behavior. """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Item(models.Model): name = models.CharField(max_length=15) text = models.TextField(default="xyzzy") @@ -31,7 +29,6 @@ class Child(models.Model): value = models.IntegerField() -@python_2_unicode_compatible class Leaf(models.Model): name = models.CharField(max_length=10) child = models.ForeignKey(Child, models.CASCADE) @@ -52,7 +49,6 @@ class Proxy(Item): proxy = True -@python_2_unicode_compatible class SimpleItem(models.Model): name = models.CharField(max_length=15) value = models.IntegerField() diff --git a/tests/delete/models.py b/tests/delete/models.py index 4064173df4..2fc5ebe217 100644 --- a/tests/delete/models.py +++ b/tests/delete/models.py @@ -1,8 +1,6 @@ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class R(models.Model): is_default = models.BooleanField(default=False) diff --git a/tests/distinct_on_fields/models.py b/tests/distinct_on_fields/models.py index a4164724f3..06c4f349c0 100644 --- a/tests/distinct_on_fields/models.py +++ b/tests/distinct_on_fields/models.py @@ -1,8 +1,6 @@ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Tag(models.Model): name = models.CharField(max_length=10) parent = models.ForeignKey( @@ -20,7 +18,6 @@ class Tag(models.Model): return self.name -@python_2_unicode_compatible class Celebrity(models.Model): name = models.CharField("Name", max_length=20) greatest_fan = models.ForeignKey( @@ -38,7 +35,6 @@ class Fan(models.Model): fan_of = models.ForeignKey(Celebrity, models.CASCADE) -@python_2_unicode_compatible class Staff(models.Model): id = models.IntegerField(primary_key=True) name = models.CharField(max_length=50) @@ -50,7 +46,6 @@ class Staff(models.Model): return self.name -@python_2_unicode_compatible class StaffTag(models.Model): staff = models.ForeignKey(Staff, models.CASCADE) tag = models.ForeignKey(Tag, models.CASCADE) diff --git a/tests/expressions/models.py b/tests/expressions/models.py index e2bfb8ef67..51042c845b 100644 --- a/tests/expressions/models.py +++ b/tests/expressions/models.py @@ -3,10 +3,8 @@ Tests for F() query expression syntax. """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Employee(models.Model): firstname = models.CharField(max_length=50) lastname = models.CharField(max_length=50) @@ -16,7 +14,6 @@ class Employee(models.Model): return '%s %s' % (self.firstname, self.lastname) -@python_2_unicode_compatible class Company(models.Model): name = models.CharField(max_length=100) num_employees = models.PositiveIntegerField() @@ -35,7 +32,6 @@ class Company(models.Model): return self.name -@python_2_unicode_compatible class Number(models.Model): integer = models.BigIntegerField(db_column='the_integer') float = models.FloatField(null=True, db_column='the_float') @@ -59,7 +55,6 @@ class Experiment(models.Model): return self.end - self.start -@python_2_unicode_compatible class Result(models.Model): experiment = models.ForeignKey(Experiment, models.CASCADE) result_time = models.DateTimeField() @@ -68,7 +63,6 @@ class Result(models.Model): return "Result at %s" % self.result_time -@python_2_unicode_compatible class Time(models.Model): time = models.TimeField(null=True) @@ -76,7 +70,6 @@ class Time(models.Model): return "%s" % self.time -@python_2_unicode_compatible class SimulationRun(models.Model): start = models.ForeignKey(Time, models.CASCADE, null=True, related_name='+') end = models.ForeignKey(Time, models.CASCADE, null=True, related_name='+') @@ -86,7 +79,6 @@ class SimulationRun(models.Model): return "%s (%s to %s)" % (self.midpoint, self.start, self.end) -@python_2_unicode_compatible class UUID(models.Model): uuid = models.UUIDField(null=True) diff --git a/tests/expressions_case/models.py b/tests/expressions_case/models.py index 8c2eaac399..7c1a8d75b7 100644 --- a/tests/expressions_case/models.py +++ b/tests/expressions_case/models.py @@ -1,5 +1,4 @@ from django.db import models -from django.utils.encoding import python_2_unicode_compatible try: from PIL import Image @@ -7,7 +6,6 @@ except ImportError: Image = None -@python_2_unicode_compatible class CaseTestModel(models.Model): integer = models.IntegerField() integer2 = models.IntegerField(null=True) @@ -42,7 +40,6 @@ class CaseTestModel(models.Model): return "%i, %s" % (self.integer, self.string) -@python_2_unicode_compatible class O2OCaseTestModel(models.Model): o2o = models.OneToOneField(CaseTestModel, models.CASCADE, related_name='o2o_rel') integer = models.IntegerField() @@ -51,7 +48,6 @@ class O2OCaseTestModel(models.Model): return "%i, %s" % (self.id, self.o2o) -@python_2_unicode_compatible class FKCaseTestModel(models.Model): fk = models.ForeignKey(CaseTestModel, models.CASCADE, related_name='fk_rel') integer = models.IntegerField() @@ -60,7 +56,6 @@ class FKCaseTestModel(models.Model): return "%i, %s" % (self.id, self.fk) -@python_2_unicode_compatible class Client(models.Model): REGULAR = 'R' GOLD = 'G' diff --git a/tests/extra_regress/models.py b/tests/extra_regress/models.py index b271d8701f..1a5c2dedeb 100644 --- a/tests/extra_regress/models.py +++ b/tests/extra_regress/models.py @@ -3,10 +3,8 @@ import datetime from django.contrib.auth.models import User from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class RevisionableModel(models.Model): base = models.ForeignKey('self', models.SET_NULL, null=True) title = models.CharField(blank=True, max_length=255) @@ -34,7 +32,6 @@ class Order(models.Model): text = models.TextField() -@python_2_unicode_compatible class TestObject(models.Model): first = models.CharField(max_length=20) second = models.CharField(max_length=20) diff --git a/tests/field_defaults/models.py b/tests/field_defaults/models.py index 71129cb5c7..e125dd1c4f 100644 --- a/tests/field_defaults/models.py +++ b/tests/field_defaults/models.py @@ -12,10 +12,8 @@ field. from datetime import datetime from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Article(models.Model): headline = models.CharField(max_length=100, default='Default headline') pub_date = models.DateTimeField(default=datetime.now) diff --git a/tests/fixtures/models.py b/tests/fixtures/models.py index 78161c8474..b3ebb8fc5d 100644 --- a/tests/fixtures/models.py +++ b/tests/fixtures/models.py @@ -14,10 +14,8 @@ from django.contrib.auth.models import Permission from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Category(models.Model): title = models.CharField(max_length=100) description = models.TextField() @@ -29,7 +27,6 @@ class Category(models.Model): ordering = ('title',) -@python_2_unicode_compatible class Article(models.Model): headline = models.CharField(max_length=100, default='Default headline') pub_date = models.DateTimeField() @@ -41,7 +38,6 @@ class Article(models.Model): ordering = ('-pub_date', 'headline') -@python_2_unicode_compatible class Blog(models.Model): name = models.CharField(max_length=100) featured = models.ForeignKey(Article, models.CASCADE, related_name='fixtures_featured_set') @@ -52,7 +48,6 @@ class Blog(models.Model): return self.name -@python_2_unicode_compatible class Tag(models.Model): name = models.CharField(max_length=100) tagged_type = models.ForeignKey(ContentType, models.CASCADE, related_name="fixtures_tag_set") @@ -69,7 +64,6 @@ class PersonManager(models.Manager): return self.get(name=name) -@python_2_unicode_compatible class Person(models.Model): objects = PersonManager() name = models.CharField(max_length=100) @@ -99,7 +93,6 @@ class ProxySpy(Spy): proxy = True -@python_2_unicode_compatible class Visa(models.Model): person = models.ForeignKey(Person, models.CASCADE) permissions = models.ManyToManyField(Permission, blank=True) @@ -109,7 +102,6 @@ class Visa(models.Model): ', '.join(p.name for p in self.permissions.all())) -@python_2_unicode_compatible class Book(models.Model): name = models.CharField(max_length=100) authors = models.ManyToManyField(Person) diff --git a/tests/fixtures_model_package/models/__init__.py b/tests/fixtures_model_package/models/__init__.py index 63d73f83f9..5160f354e6 100644 --- a/tests/fixtures_model_package/models/__init__.py +++ b/tests/fixtures_model_package/models/__init__.py @@ -1,8 +1,6 @@ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Article(models.Model): headline = models.CharField(max_length=100, default='Default headline') pub_date = models.DateTimeField() diff --git a/tests/fixtures_regress/models.py b/tests/fixtures_regress/models.py index 63e883f7d5..a631fa44d1 100644 --- a/tests/fixtures_regress/models.py +++ b/tests/fixtures_regress/models.py @@ -1,10 +1,8 @@ from django.contrib.auth.models import User from django.db import models from django.utils import six -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Animal(models.Model): name = models.CharField(max_length=150) latin_name = models.CharField(max_length=150) @@ -26,7 +24,6 @@ class Plant(models.Model): db_table = "Fixtures_regress_plant" -@python_2_unicode_compatible class Stuff(models.Model): name = models.CharField(max_length=20, null=True) owner = models.ForeignKey(User, models.SET_NULL, null=True) @@ -80,7 +77,6 @@ class Feature(CommonFeature): # Models to regression test #11428 -@python_2_unicode_compatible class Widget(models.Model): name = models.CharField(max_length=255) @@ -102,7 +98,6 @@ class TestManager(models.Manager): return self.get(name=key) -@python_2_unicode_compatible class Store(models.Model): objects = TestManager() name = models.CharField(max_length=255) @@ -118,7 +113,6 @@ class Store(models.Model): return (self.name,) -@python_2_unicode_compatible class Person(models.Model): objects = TestManager() name = models.CharField(max_length=255) @@ -136,7 +130,6 @@ class Person(models.Model): natural_key.dependencies = ['fixtures_regress.store'] -@python_2_unicode_compatible class Book(models.Model): name = models.CharField(max_length=255) author = models.ForeignKey(Person, models.CASCADE) @@ -158,7 +151,6 @@ class NKManager(models.Manager): return self.get(data=data) -@python_2_unicode_compatible class NKChild(Parent): data = models.CharField(max_length=10, unique=True) objects = NKManager() @@ -170,7 +162,6 @@ class NKChild(Parent): return 'NKChild %s:%s' % (self.name, self.data) -@python_2_unicode_compatible class RefToNKChild(models.Model): text = models.CharField(max_length=10) nk_fk = models.ForeignKey(NKChild, models.CASCADE, related_name='ref_fks') @@ -250,7 +241,6 @@ class M2MToSelf(models.Model): parent = models.ManyToManyField("self", blank=True) -@python_2_unicode_compatible class BaseNKModel(models.Model): """ Base model with a natural_key and a manager with `get_by_natural_key` diff --git a/tests/foreign_object/models/article.py b/tests/foreign_object/models/article.py index 6e16784d2c..e5c0c1f673 100644 --- a/tests/foreign_object/models/article.py +++ b/tests/foreign_object/models/article.py @@ -1,6 +1,5 @@ from django.db import models from django.db.models.fields.related import ForwardManyToOneDescriptor -from django.utils.encoding import python_2_unicode_compatible from django.utils.translation import get_language @@ -49,7 +48,6 @@ class ActiveTranslationFieldWithQ(ActiveTranslationField): return models.Q(lang=get_language()) -@python_2_unicode_compatible class Article(models.Model): active_translation = ActiveTranslationField( 'ArticleTranslation', diff --git a/tests/foreign_object/models/empty_join.py b/tests/foreign_object/models/empty_join.py index 28f3006c94..5b58ffdafc 100644 --- a/tests/foreign_object/models/empty_join.py +++ b/tests/foreign_object/models/empty_join.py @@ -4,7 +4,6 @@ from django.db.models.fields.related import ( ) from django.db.models.lookups import StartsWith from django.db.models.query_utils import PathInfo -from django.utils.encoding import python_2_unicode_compatible class CustomForeignObjectRel(ForeignObjectRel): @@ -78,7 +77,6 @@ class BrokenContainsRelation(StartsWithRelation): return None -@python_2_unicode_compatible class SlugPage(models.Model): slug = models.CharField(max_length=20, unique=True) descendants = StartsWithRelation( diff --git a/tests/foreign_object/models/person.py b/tests/foreign_object/models/person.py index 26d88007fb..a41d9d96d9 100644 --- a/tests/foreign_object/models/person.py +++ b/tests/foreign_object/models/person.py @@ -1,10 +1,8 @@ import datetime from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Country(models.Model): # Table Column Fields name = models.CharField(max_length=50) @@ -13,7 +11,6 @@ class Country(models.Model): return self.name -@python_2_unicode_compatible class Person(models.Model): # Table Column Fields name = models.CharField(max_length=128) @@ -35,7 +32,6 @@ class Person(models.Model): return self.name -@python_2_unicode_compatible class Group(models.Model): # Table Column Fields name = models.CharField(max_length=128) @@ -49,7 +45,6 @@ class Group(models.Model): return self.name -@python_2_unicode_compatible class Membership(models.Model): # Table Column Fields membership_country = models.ForeignKey(Country, models.CASCADE) diff --git a/tests/forms_tests/models.py b/tests/forms_tests/models.py index be1b66bce6..fa63d08fd1 100644 --- a/tests/forms_tests/models.py +++ b/tests/forms_tests/models.py @@ -4,7 +4,6 @@ import tempfile from django.core.files.storage import FileSystemStorage from django.db import models -from django.utils.encoding import python_2_unicode_compatible callable_default_counter = itertools.count() @@ -55,7 +54,6 @@ class ChoiceModel(models.Model): null=True) -@python_2_unicode_compatible class ChoiceOptionModel(models.Model): """Destination for ChoiceFieldModel's ForeignKey. Can't reuse ChoiceModel because error_message tests require that it have no instances.""" @@ -132,7 +130,6 @@ class FileModel(models.Model): file = models.FileField(storage=temp_storage, upload_to='tests') -@python_2_unicode_compatible class Group(models.Model): name = models.CharField(max_length=10) diff --git a/tests/forms_tests/tests/test_error_messages.py b/tests/forms_tests/tests/test_error_messages.py index eb7debf936..10c7a92f7d 100644 --- a/tests/forms_tests/tests/test_error_messages.py +++ b/tests/forms_tests/tests/test_error_messages.py @@ -8,7 +8,6 @@ from django.forms import ( ) from django.template import Context, Template from django.test import SimpleTestCase, TestCase -from django.utils.encoding import python_2_unicode_compatible from django.utils.safestring import mark_safe from ..models import ChoiceModel @@ -216,7 +215,6 @@ class FormsErrorMessagesTestCase(SimpleTestCase, AssertFormErrorsMixin): def clean(self): raise ValidationError("I like to be awkward.") - @python_2_unicode_compatible class CustomErrorList(utils.ErrorList): def __str__(self): return self.as_divs() diff --git a/tests/forms_tests/tests/test_forms.py b/tests/forms_tests/tests/test_forms.py index b8ced2425c..dacd7739d3 100644 --- a/tests/forms_tests/tests/test_forms.py +++ b/tests/forms_tests/tests/test_forms.py @@ -21,7 +21,7 @@ from django.template import Context, Template from django.test import SimpleTestCase from django.test.utils import str_prefix from django.utils.datastructures import MultiValueDict -from django.utils.encoding import force_text, python_2_unicode_compatible +from django.utils.encoding import force_text from django.utils.html import format_html from django.utils.safestring import SafeData, mark_safe @@ -3375,7 +3375,6 @@ Good luck picking a username that doesn't already exist.

) def test_errorlist_override(self): - @python_2_unicode_compatible class DivErrorList(ErrorList): def __str__(self): return self.as_divs() diff --git a/tests/forms_tests/tests/test_utils.py b/tests/forms_tests/tests/test_utils.py index d0dfaad370..f06b60a620 100644 --- a/tests/forms_tests/tests/test_utils.py +++ b/tests/forms_tests/tests/test_utils.py @@ -4,7 +4,7 @@ from django.core.exceptions import ValidationError from django.forms.utils import ErrorDict, ErrorList, flatatt from django.test import SimpleTestCase from django.utils import six -from django.utils.encoding import force_text, python_2_unicode_compatible +from django.utils.encoding import force_text from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy @@ -101,7 +101,6 @@ class FormsUtilsTestCase(SimpleTestCase): '' ) - @python_2_unicode_compatible class VeryBadError: def __str__(self): return "A very bad error." diff --git a/tests/forms_tests/widget_tests/test_clearablefileinput.py b/tests/forms_tests/widget_tests/test_clearablefileinput.py index 3727d0c0df..dd7f04d0ac 100644 --- a/tests/forms_tests/widget_tests/test_clearablefileinput.py +++ b/tests/forms_tests/widget_tests/test_clearablefileinput.py @@ -1,11 +1,9 @@ from django.core.files.uploadedfile import SimpleUploadedFile from django.forms import ClearableFileInput -from django.utils.encoding import python_2_unicode_compatible from .base import WidgetTest -@python_2_unicode_compatible class FakeFieldFile(object): """ Quacks like a FieldFile (has a .url and unicode representation), but @@ -39,7 +37,6 @@ class ClearableFileInputTest(WidgetTest): A ClearableFileInput should escape name, filename, and URL when rendering HTML (#15182). """ - @python_2_unicode_compatible class StrangeFieldFile(object): url = "something?chapter=1§=2©=3&lang=en" @@ -110,7 +107,6 @@ class ClearableFileInputTest(WidgetTest): A ClearableFileInput should not mask exceptions produced while checking that it has a value. """ - @python_2_unicode_compatible class FailingURLFieldFile(object): @property def url(self): @@ -123,7 +119,6 @@ class ClearableFileInputTest(WidgetTest): self.widget.render('myfile', FailingURLFieldFile()) def test_url_as_property(self): - @python_2_unicode_compatible class URLFieldFile(object): @property def url(self): @@ -136,7 +131,6 @@ class ClearableFileInputTest(WidgetTest): self.assertInHTML('value', html) def test_return_false_if_url_does_not_exists(self): - @python_2_unicode_compatible class NoURLFieldFile(object): def __str__(self): return 'value' diff --git a/tests/from_db_value/models.py b/tests/from_db_value/models.py index aa62b1f567..fae9565a02 100644 --- a/tests/from_db_value/models.py +++ b/tests/from_db_value/models.py @@ -1,7 +1,6 @@ import decimal from django.db import models -from django.utils.encoding import python_2_unicode_compatible class Cash(decimal.Decimal): @@ -24,7 +23,6 @@ class CashField(models.DecimalField): return cash -@python_2_unicode_compatible class CashModel(models.Model): cash = CashField() diff --git a/tests/generic_inline_admin/models.py b/tests/generic_inline_admin/models.py index e981612bd8..96cb6fb5a3 100644 --- a/tests/generic_inline_admin/models.py +++ b/tests/generic_inline_admin/models.py @@ -3,7 +3,6 @@ from django.contrib.contenttypes.fields import ( ) from django.contrib.contenttypes.models import ContentType from django.db import models -from django.utils.encoding import python_2_unicode_compatible class Episode(models.Model): @@ -12,7 +11,6 @@ class Episode(models.Model): author = models.CharField(max_length=100, blank=True) -@python_2_unicode_compatible class Media(models.Model): """ Media that can associated to any object. diff --git a/tests/generic_relations/models.py b/tests/generic_relations/models.py index f1748b7433..a2f68ff05a 100644 --- a/tests/generic_relations/models.py +++ b/tests/generic_relations/models.py @@ -14,10 +14,8 @@ from django.contrib.contenttypes.fields import ( ) from django.contrib.contenttypes.models import ContentType from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class TaggedItem(models.Model): """A tag on an item.""" tag = models.SlugField() @@ -46,7 +44,6 @@ class AbstractComparison(models.Model): first_obj = GenericForeignKey(ct_field="content_type1", fk_field="object_id1") -@python_2_unicode_compatible class Comparison(AbstractComparison): """ A model that tests having multiple GenericForeignKeys. One is defined @@ -61,7 +58,6 @@ class Comparison(AbstractComparison): return "%s is %s than %s" % (self.first_obj, self.comparative, self.other_obj) -@python_2_unicode_compatible class Animal(models.Model): common_name = models.CharField(max_length=150) latin_name = models.CharField(max_length=150) @@ -75,7 +71,6 @@ class Animal(models.Model): return self.common_name -@python_2_unicode_compatible class Vegetable(models.Model): name = models.CharField(max_length=150) is_yucky = models.BooleanField(default=True) @@ -90,7 +85,6 @@ class Carrot(Vegetable): pass -@python_2_unicode_compatible class Mineral(models.Model): name = models.CharField(max_length=150) hardness = models.PositiveSmallIntegerField() diff --git a/tests/generic_relations_regress/models.py b/tests/generic_relations_regress/models.py index eb4f645d34..d9cf692b75 100644 --- a/tests/generic_relations_regress/models.py +++ b/tests/generic_relations_regress/models.py @@ -4,14 +4,12 @@ from django.contrib.contenttypes.fields import ( from django.contrib.contenttypes.models import ContentType from django.db import models from django.db.models.deletion import ProtectedError -from django.utils.encoding import python_2_unicode_compatible __all__ = ('Link', 'Place', 'Restaurant', 'Person', 'Address', 'CharLink', 'TextLink', 'OddRelation1', 'OddRelation2', 'Contact', 'Organization', 'Note', 'Company') -@python_2_unicode_compatible class Link(models.Model): content_type = models.ForeignKey(ContentType, models.CASCADE) object_id = models.PositiveIntegerField() @@ -21,7 +19,6 @@ class Link(models.Model): return "Link to %s id=%s" % (self.content_type, self.object_id) -@python_2_unicode_compatible class Place(models.Model): name = models.CharField(max_length=100) links = GenericRelation(Link) @@ -30,13 +27,11 @@ class Place(models.Model): return "Place: %s" % self.name -@python_2_unicode_compatible class Restaurant(Place): def __str__(self): return "Restaurant: %s" % self.name -@python_2_unicode_compatible class Address(models.Model): street = models.CharField(max_length=80) city = models.CharField(max_length=50) @@ -50,7 +45,6 @@ class Address(models.Model): return '%s %s, %s %s' % (self.street, self.city, self.state, self.zipcode) -@python_2_unicode_compatible class Person(models.Model): account = models.IntegerField(primary_key=True) name = models.CharField(max_length=128) @@ -99,7 +93,6 @@ class Organization(models.Model): contacts = models.ManyToManyField(Contact, related_name='organizations') -@python_2_unicode_compatible class Company(models.Model): name = models.CharField(max_length=100) links = GenericRelation(Link) @@ -113,7 +106,6 @@ class Developer(models.Model): name = models.CharField(max_length=15) -@python_2_unicode_compatible class Team(models.Model): name = models.CharField(max_length=15) members = models.ManyToManyField(Developer) diff --git a/tests/generic_views/models.py b/tests/generic_views/models.py index a840df7d62..8f806b9a85 100644 --- a/tests/generic_views/models.py +++ b/tests/generic_views/models.py @@ -2,10 +2,8 @@ from django.db import models from django.db.models import QuerySet from django.db.models.manager import BaseManager from django.urls import reverse -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Artist(models.Model): name = models.CharField(max_length=100) @@ -21,7 +19,6 @@ class Artist(models.Model): return reverse('artist_detail', kwargs={'pk': self.id}) -@python_2_unicode_compatible class Author(models.Model): name = models.CharField(max_length=100) slug = models.SlugField() @@ -41,7 +38,6 @@ class DoesNotExistQuerySet(QuerySet): DoesNotExistBookManager = BaseManager.from_queryset(DoesNotExistQuerySet) -@python_2_unicode_compatible class Book(models.Model): name = models.CharField(max_length=300) slug = models.SlugField() diff --git a/tests/get_object_or_404/models.py b/tests/get_object_or_404/models.py index 4460e46642..ce74bc04ad 100644 --- a/tests/get_object_or_404/models.py +++ b/tests/get_object_or_404/models.py @@ -11,10 +11,8 @@ performing a ``filter()`` lookup and raising a ``Http404`` exception if a """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Author(models.Model): name = models.CharField(max_length=50) @@ -27,7 +25,6 @@ class ArticleManager(models.Manager): return super(ArticleManager, self).get_queryset().filter(authors__name__icontains='sir') -@python_2_unicode_compatible class Article(models.Model): authors = models.ManyToManyField(Author) title = models.CharField(max_length=50) diff --git a/tests/get_or_create/models.py b/tests/get_or_create/models.py index 5d6e69de3a..cfde80ce85 100644 --- a/tests/get_or_create/models.py +++ b/tests/get_or_create/models.py @@ -1,8 +1,6 @@ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Person(models.Model): first_name = models.CharField(max_length=100) last_name = models.CharField(max_length=100) diff --git a/tests/gis_tests/distapp/models.py b/tests/gis_tests/distapp/models.py index 43a2acacdf..1a5ef2cf90 100644 --- a/tests/gis_tests/distapp/models.py +++ b/tests/gis_tests/distapp/models.py @@ -1,10 +1,8 @@ from django.contrib.gis.db import models -from django.utils.encoding import python_2_unicode_compatible from ..utils import gisfield_may_be_null -@python_2_unicode_compatible class NamedModel(models.Model): name = models.CharField(max_length=30) diff --git a/tests/gis_tests/geo3d/models.py b/tests/gis_tests/geo3d/models.py index 42467c5ce4..b7d3257f99 100644 --- a/tests/gis_tests/geo3d/models.py +++ b/tests/gis_tests/geo3d/models.py @@ -1,8 +1,6 @@ from django.contrib.gis.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class NamedModel(models.Model): name = models.CharField(max_length=30) diff --git a/tests/gis_tests/geoadmin/models.py b/tests/gis_tests/geoadmin/models.py index e57dcd7e9a..9303dc1228 100644 --- a/tests/gis_tests/geoadmin/models.py +++ b/tests/gis_tests/geoadmin/models.py @@ -1,10 +1,8 @@ from django.contrib.gis.db import models -from django.utils.encoding import python_2_unicode_compatible from ..admin import admin -@python_2_unicode_compatible class City(models.Model): name = models.CharField(max_length=30) point = models.PointField() diff --git a/tests/gis_tests/geoapp/models.py b/tests/gis_tests/geoapp/models.py index f5f4c38b42..83e3242043 100644 --- a/tests/gis_tests/geoapp/models.py +++ b/tests/gis_tests/geoapp/models.py @@ -1,10 +1,8 @@ from django.contrib.gis.db import models -from django.utils.encoding import python_2_unicode_compatible from ..utils import gisfield_may_be_null -@python_2_unicode_compatible class NamedModel(models.Model): name = models.CharField(max_length=30) diff --git a/tests/gis_tests/geogapp/models.py b/tests/gis_tests/geogapp/models.py index 6bc5955923..3a658a6c47 100644 --- a/tests/gis_tests/geogapp/models.py +++ b/tests/gis_tests/geogapp/models.py @@ -1,8 +1,6 @@ from django.contrib.gis.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class NamedModel(models.Model): name = models.CharField(max_length=30) diff --git a/tests/gis_tests/layermap/models.py b/tests/gis_tests/layermap/models.py index 25dd0e4bcd..7bb7717fe8 100644 --- a/tests/gis_tests/layermap/models.py +++ b/tests/gis_tests/layermap/models.py @@ -1,8 +1,6 @@ from django.contrib.gis.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class NamedModel(models.Model): name = models.CharField(max_length=25) diff --git a/tests/gis_tests/relatedapp/models.py b/tests/gis_tests/relatedapp/models.py index 6d674588dd..749f39f74c 100644 --- a/tests/gis_tests/relatedapp/models.py +++ b/tests/gis_tests/relatedapp/models.py @@ -1,5 +1,4 @@ from django.contrib.gis.db import models -from django.utils.encoding import python_2_unicode_compatible class SimpleModel(models.Model): @@ -8,7 +7,6 @@ class SimpleModel(models.Model): required_db_features = ['gis_enabled'] -@python_2_unicode_compatible class Location(SimpleModel): point = models.PointField() @@ -16,7 +14,6 @@ class Location(SimpleModel): return self.point.wkt -@python_2_unicode_compatible class City(SimpleModel): name = models.CharField(max_length=50) state = models.CharField(max_length=2) @@ -35,7 +32,6 @@ class DirectoryEntry(SimpleModel): location = models.ForeignKey(AugmentedLocation, models.CASCADE) -@python_2_unicode_compatible class Parcel(SimpleModel): name = models.CharField(max_length=30) city = models.ForeignKey(City, models.CASCADE) diff --git a/tests/inline_formsets/models.py b/tests/inline_formsets/models.py index 42cf810f53..90d434e123 100644 --- a/tests/inline_formsets/models.py +++ b/tests/inline_formsets/models.py @@ -1,5 +1,4 @@ from django.db import models -from django.utils.encoding import python_2_unicode_compatible class School(models.Model): @@ -17,7 +16,6 @@ class Child(models.Model): name = models.CharField(max_length=100) -@python_2_unicode_compatible class Poet(models.Model): name = models.CharField(max_length=100) @@ -25,7 +23,6 @@ class Poet(models.Model): return self.name -@python_2_unicode_compatible class Poem(models.Model): poet = models.ForeignKey(Poet, models.CASCADE) name = models.CharField(max_length=100) diff --git a/tests/introspection/models.py b/tests/introspection/models.py index 023e622beb..2a1746531d 100644 --- a/tests/introspection/models.py +++ b/tests/introspection/models.py @@ -1,8 +1,6 @@ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class City(models.Model): id = models.BigAutoField(primary_key=True) name = models.CharField(max_length=50) @@ -11,7 +9,6 @@ class City(models.Model): return self.name -@python_2_unicode_compatible class District(models.Model): city = models.ForeignKey(City, models.CASCADE, primary_key=True) name = models.CharField(max_length=50) @@ -20,7 +17,6 @@ class District(models.Model): return self.name -@python_2_unicode_compatible class Reporter(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) @@ -36,7 +32,6 @@ class Reporter(models.Model): return "%s %s" % (self.first_name, self.last_name) -@python_2_unicode_compatible class Article(models.Model): headline = models.CharField(max_length=100) pub_date = models.DateField() diff --git a/tests/lookup/models.py b/tests/lookup/models.py index 3490422f69..9cf053d873 100644 --- a/tests/lookup/models.py +++ b/tests/lookup/models.py @@ -6,7 +6,6 @@ This demonstrates features of the database API. from django.db import models from django.utils import six -from django.utils.encoding import python_2_unicode_compatible class Alarm(models.Model): @@ -24,7 +23,6 @@ class Author(models.Model): ordering = ('name', ) -@python_2_unicode_compatible class Article(models.Model): headline = models.CharField(max_length=100) pub_date = models.DateTimeField() @@ -45,7 +43,6 @@ class Tag(models.Model): ordering = ('name', ) -@python_2_unicode_compatible class Season(models.Model): year = models.PositiveSmallIntegerField() gt = models.IntegerField(null=True, blank=True) @@ -54,7 +51,6 @@ class Season(models.Model): return six.text_type(self.year) -@python_2_unicode_compatible class Game(models.Model): season = models.ForeignKey(Season, models.CASCADE, related_name='games') home = models.CharField(max_length=100) @@ -64,7 +60,6 @@ class Game(models.Model): return "%s at %s" % (self.away, self.home) -@python_2_unicode_compatible class Player(models.Model): name = models.CharField(max_length=100) games = models.ManyToManyField(Game, related_name='players') diff --git a/tests/m2m_and_m2o/models.py b/tests/m2m_and_m2o/models.py index 621c56ca1a..7174e6369a 100644 --- a/tests/m2m_and_m2o/models.py +++ b/tests/m2m_and_m2o/models.py @@ -5,14 +5,12 @@ Make sure to set ``related_name`` if you use relationships to the same table. """ from django.db import models from django.utils import six -from django.utils.encoding import python_2_unicode_compatible class User(models.Model): username = models.CharField(max_length=20) -@python_2_unicode_compatible class Issue(models.Model): num = models.IntegerField() cc = models.ManyToManyField(User, blank=True, related_name='test_issue_cc') diff --git a/tests/m2m_intermediary/models.py b/tests/m2m_intermediary/models.py index dbd822df51..3101fd8a2d 100644 --- a/tests/m2m_intermediary/models.py +++ b/tests/m2m_intermediary/models.py @@ -10,10 +10,8 @@ field, which specifies the ``Reporter``'s position for the given article (e.g. "Staff writer"). """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Reporter(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) @@ -22,7 +20,6 @@ class Reporter(models.Model): return "%s %s" % (self.first_name, self.last_name) -@python_2_unicode_compatible class Article(models.Model): headline = models.CharField(max_length=100) pub_date = models.DateField() @@ -31,7 +28,6 @@ class Article(models.Model): return self.headline -@python_2_unicode_compatible class Writer(models.Model): reporter = models.ForeignKey(Reporter, models.CASCADE) article = models.ForeignKey(Article, models.CASCADE) diff --git a/tests/m2m_multiple/models.py b/tests/m2m_multiple/models.py index a6db9425bd..7a77044c2c 100644 --- a/tests/m2m_multiple/models.py +++ b/tests/m2m_multiple/models.py @@ -8,10 +8,8 @@ Set ``related_name`` to designate what the reverse relationship is called. """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Category(models.Model): name = models.CharField(max_length=20) @@ -22,7 +20,6 @@ class Category(models.Model): return self.name -@python_2_unicode_compatible class Article(models.Model): headline = models.CharField(max_length=50) pub_date = models.DateTimeField() diff --git a/tests/m2m_recursive/models.py b/tests/m2m_recursive/models.py index d224b3d572..fd4f4ad166 100644 --- a/tests/m2m_recursive/models.py +++ b/tests/m2m_recursive/models.py @@ -17,10 +17,8 @@ appropriate. """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Person(models.Model): name = models.CharField(max_length=20) friends = models.ManyToManyField('self') diff --git a/tests/m2m_regress/models.py b/tests/m2m_regress/models.py index 57f02b8f90..70966bd0b8 100644 --- a/tests/m2m_regress/models.py +++ b/tests/m2m_regress/models.py @@ -1,11 +1,9 @@ from django.contrib.auth import models as auth from django.db import models -from django.utils.encoding import python_2_unicode_compatible # No related name is needed here, since symmetrical relations are not # explicitly reversible. -@python_2_unicode_compatible class SelfRefer(models.Model): name = models.CharField(max_length=10) references = models.ManyToManyField('self') @@ -15,7 +13,6 @@ class SelfRefer(models.Model): return self.name -@python_2_unicode_compatible class Tag(models.Model): name = models.CharField(max_length=10) @@ -24,7 +21,6 @@ class Tag(models.Model): # Regression for #11956 -- a many to many to the base class -@python_2_unicode_compatible class TagCollection(Tag): tags = models.ManyToManyField(Tag, related_name='tag_collections') @@ -34,7 +30,6 @@ class TagCollection(Tag): # A related_name is required on one of the ManyToManyField entries here because # they are both addressable as reverse relations from Tag. -@python_2_unicode_compatible class Entry(models.Model): name = models.CharField(max_length=10) topics = models.ManyToManyField(Tag) @@ -54,7 +49,6 @@ class SelfReferChildSibling(SelfRefer): # Many-to-Many relation between models, where one of the PK's isn't an Autofield -@python_2_unicode_compatible class Line(models.Model): name = models.CharField(max_length=100) diff --git a/tests/m2m_signals/models.py b/tests/m2m_signals/models.py index e4110ccf34..c156128c83 100644 --- a/tests/m2m_signals/models.py +++ b/tests/m2m_signals/models.py @@ -1,8 +1,6 @@ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Part(models.Model): name = models.CharField(max_length=20) @@ -13,7 +11,6 @@ class Part(models.Model): return self.name -@python_2_unicode_compatible class Car(models.Model): name = models.CharField(max_length=20) default_parts = models.ManyToManyField(Part) @@ -30,7 +27,6 @@ class SportsCar(Car): price = models.IntegerField() -@python_2_unicode_compatible class Person(models.Model): name = models.CharField(max_length=20) fans = models.ManyToManyField('self', related_name='idols', symmetrical=False) diff --git a/tests/m2m_through/models.py b/tests/m2m_through/models.py index dab3be5164..5f9fba27a7 100644 --- a/tests/m2m_through/models.py +++ b/tests/m2m_through/models.py @@ -1,11 +1,9 @@ from datetime import datetime from django.db import models -from django.utils.encoding import python_2_unicode_compatible # M2M described on one of the models -@python_2_unicode_compatible class Person(models.Model): name = models.CharField(max_length=128) @@ -16,7 +14,6 @@ class Person(models.Model): return self.name -@python_2_unicode_compatible class Group(models.Model): name = models.CharField(max_length=128) members = models.ManyToManyField(Person, through='Membership') @@ -34,7 +31,6 @@ class Group(models.Model): return self.name -@python_2_unicode_compatible class Membership(models.Model): person = models.ForeignKey(Person, models.CASCADE) group = models.ForeignKey(Group, models.CASCADE) @@ -48,7 +44,6 @@ class Membership(models.Model): return "%s is a member of %s" % (self.person.name, self.group.name) -@python_2_unicode_compatible class CustomMembership(models.Model): person = models.ForeignKey( Person, @@ -74,7 +69,6 @@ class TestNoDefaultsOrNulls(models.Model): nodefaultnonull = models.CharField(max_length=5) -@python_2_unicode_compatible class PersonSelfRefM2M(models.Model): name = models.CharField(max_length=5) friends = models.ManyToManyField('self', through="Friendship", symmetrical=False) @@ -90,7 +84,6 @@ class Friendship(models.Model): # Custom through link fields -@python_2_unicode_compatible class Event(models.Model): title = models.CharField(max_length=50) invitees = models.ManyToManyField( @@ -110,7 +103,6 @@ class Invitation(models.Model): invitee = models.ForeignKey(Person, models.CASCADE, related_name='invitations') -@python_2_unicode_compatible class Employee(models.Model): name = models.CharField(max_length=5) subordinates = models.ManyToManyField( diff --git a/tests/m2m_through_regress/models.py b/tests/m2m_through_regress/models.py index 9f0f44cd21..1214c93ea1 100644 --- a/tests/m2m_through_regress/models.py +++ b/tests/m2m_through_regress/models.py @@ -1,10 +1,8 @@ from django.contrib.auth.models import User from django.db import models -from django.utils.encoding import python_2_unicode_compatible # Forward declared intermediate model -@python_2_unicode_compatible class Membership(models.Model): person = models.ForeignKey('Person', models.CASCADE) group = models.ForeignKey('Group', models.CASCADE) @@ -15,7 +13,6 @@ class Membership(models.Model): # using custom id column to test ticket #11107 -@python_2_unicode_compatible class UserMembership(models.Model): id = models.AutoField(db_column='usermembership_id', primary_key=True) user = models.ForeignKey(User, models.CASCADE) @@ -26,7 +23,6 @@ class UserMembership(models.Model): return "%s is a user and member of %s" % (self.user.username, self.group.name) -@python_2_unicode_compatible class Person(models.Model): name = models.CharField(max_length=128) @@ -34,7 +30,6 @@ class Person(models.Model): return self.name -@python_2_unicode_compatible class Group(models.Model): name = models.CharField(max_length=128) # Membership object defined as a class @@ -65,7 +60,6 @@ class B(models.Model): # Using to_field on the through model -@python_2_unicode_compatible class Car(models.Model): make = models.CharField(max_length=20, unique=True, null=True) drivers = models.ManyToManyField('Driver', through='CarDriver') @@ -74,7 +68,6 @@ class Car(models.Model): return "%s" % self.make -@python_2_unicode_compatible class Driver(models.Model): name = models.CharField(max_length=20, unique=True, null=True) @@ -85,7 +78,6 @@ class Driver(models.Model): ordering = ('name',) -@python_2_unicode_compatible class CarDriver(models.Model): car = models.ForeignKey('Car', models.CASCADE, to_field='make') driver = models.ForeignKey('Driver', models.CASCADE, to_field='name') diff --git a/tests/m2o_recursive/models.py b/tests/m2o_recursive/models.py index d62c514a25..bb73589800 100644 --- a/tests/m2o_recursive/models.py +++ b/tests/m2o_recursive/models.py @@ -11,10 +11,8 @@ Set ``related_name`` to designate what the reverse relationship is called. """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Category(models.Model): name = models.CharField(max_length=20) parent = models.ForeignKey('self', models.SET_NULL, blank=True, null=True, related_name='child_set') @@ -23,7 +21,6 @@ class Category(models.Model): return self.name -@python_2_unicode_compatible class Person(models.Model): full_name = models.CharField(max_length=20) mother = models.ForeignKey('self', models.SET_NULL, null=True, related_name='mothers_child_set') diff --git a/tests/managers_regress/models.py b/tests/managers_regress/models.py index b39e69b9ad..f5fd648bff 100644 --- a/tests/managers_regress/models.py +++ b/tests/managers_regress/models.py @@ -7,7 +7,7 @@ from django.contrib.contenttypes.fields import ( ) from django.contrib.contenttypes.models import ContentType from django.db import models -from django.utils.encoding import force_text, python_2_unicode_compatible +from django.utils.encoding import force_text class OnlyFred(models.Manager): @@ -55,7 +55,6 @@ class AbstractBase3(models.Model): abstract = True -@python_2_unicode_compatible class Parent(models.Model): name = models.CharField(max_length=50) @@ -68,7 +67,6 @@ class Parent(models.Model): # Managers from base classes are inherited and, if no manager is specified # *and* the parent has a manager specified, the first one (in the MRO) will # become the default. -@python_2_unicode_compatible class Child1(AbstractBase1): data = models.CharField(max_length=25) @@ -76,7 +74,6 @@ class Child1(AbstractBase1): return self.data -@python_2_unicode_compatible class Child2(AbstractBase1, AbstractBase2): data = models.CharField(max_length=25) @@ -84,7 +81,6 @@ class Child2(AbstractBase1, AbstractBase2): return self.data -@python_2_unicode_compatible class Child3(AbstractBase1, AbstractBase3): data = models.CharField(max_length=25) @@ -92,7 +88,6 @@ class Child3(AbstractBase1, AbstractBase3): return self.data -@python_2_unicode_compatible class Child4(AbstractBase1): data = models.CharField(max_length=25) @@ -104,7 +99,6 @@ class Child4(AbstractBase1): return self.data -@python_2_unicode_compatible class Child5(AbstractBase3): name = models.CharField(max_length=25) @@ -124,7 +118,6 @@ class Child7(Parent): # RelatedManagers -@python_2_unicode_compatible class RelatedModel(models.Model): test_gfk = GenericRelation('RelationModel', content_type_field='gfk_ctype', object_id_field='gfk_id') exact = models.NullBooleanField() @@ -133,7 +126,6 @@ class RelatedModel(models.Model): return force_text(self.pk) -@python_2_unicode_compatible class RelationModel(models.Model): fk = models.ForeignKey(RelatedModel, models.CASCADE, related_name='test_fk') diff --git a/tests/many_to_many/models.py b/tests/many_to_many/models.py index b0e708ebb4..cf3add7848 100644 --- a/tests/many_to_many/models.py +++ b/tests/many_to_many/models.py @@ -7,10 +7,8 @@ In this example, an ``Article`` can be published in multiple ``Publication`` objects, and a ``Publication`` has multiple ``Article`` objects. """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Publication(models.Model): title = models.CharField(max_length=30) @@ -21,7 +19,6 @@ class Publication(models.Model): ordering = ('title',) -@python_2_unicode_compatible class Tag(models.Model): id = models.BigAutoField(primary_key=True) name = models.CharField(max_length=50) @@ -30,7 +27,6 @@ class Tag(models.Model): return self.name -@python_2_unicode_compatible class Article(models.Model): headline = models.CharField(max_length=100) # Assign a unicode string as name to make sure the intermediary model is diff --git a/tests/many_to_one/models.py b/tests/many_to_one/models.py index 09578b56a3..93b8029b2f 100644 --- a/tests/many_to_one/models.py +++ b/tests/many_to_one/models.py @@ -4,10 +4,8 @@ Many-to-one relationships To define a many-to-one relationship, use ``ForeignKey()``. """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Reporter(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) @@ -17,7 +15,6 @@ class Reporter(models.Model): return "%s %s" % (self.first_name, self.last_name) -@python_2_unicode_compatible class Article(models.Model): headline = models.CharField(max_length=100) pub_date = models.DateField() @@ -30,7 +27,6 @@ class Article(models.Model): ordering = ('headline',) -@python_2_unicode_compatible class City(models.Model): id = models.BigAutoField(primary_key=True) name = models.CharField(max_length=50) @@ -39,7 +35,6 @@ class City(models.Model): return self.name -@python_2_unicode_compatible class District(models.Model): city = models.ForeignKey(City, models.CASCADE, related_name='districts', null=True) name = models.CharField(max_length=50) @@ -80,7 +75,6 @@ class ToFieldChild(models.Model): # Multiple paths to the same model (#7110, #7125) -@python_2_unicode_compatible class Category(models.Model): name = models.CharField(max_length=20) @@ -92,7 +86,6 @@ class Record(models.Model): category = models.ForeignKey(Category, models.CASCADE) -@python_2_unicode_compatible class Relation(models.Model): left = models.ForeignKey(Record, models.CASCADE, related_name='left_set') right = models.ForeignKey(Record, models.CASCADE, related_name='right_set') diff --git a/tests/many_to_one_null/models.py b/tests/many_to_one_null/models.py index 2a67623dc3..23b4294593 100644 --- a/tests/many_to_one_null/models.py +++ b/tests/many_to_one_null/models.py @@ -6,10 +6,8 @@ To define a many-to-one relationship that can have a null foreign key, use """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Reporter(models.Model): name = models.CharField(max_length=30) @@ -17,7 +15,6 @@ class Reporter(models.Model): return self.name -@python_2_unicode_compatible class Article(models.Model): headline = models.CharField(max_length=100) reporter = models.ForeignKey(Reporter, models.SET_NULL, null=True) diff --git a/tests/migrations/models.py b/tests/migrations/models.py index b1a10210b6..dea320c033 100644 --- a/tests/migrations/models.py +++ b/tests/migrations/models.py @@ -1,7 +1,6 @@ from django.apps.registry import Apps from django.db import models from django.utils import six -from django.utils.encoding import python_2_unicode_compatible class CustomModelBase(models.base.ModelBase): @@ -12,7 +11,6 @@ class ModelWithCustomBase(six.with_metaclass(CustomModelBase, models.Model)): pass -@python_2_unicode_compatible class UnicodeModel(models.Model): title = models.CharField('ÚÑÍ¢ÓÐÉ', max_length=20, default='“Ðjáñgó”') diff --git a/tests/model_forms/models.py b/tests/model_forms/models.py index da91fc88b7..333a6050ab 100644 --- a/tests/model_forms/models.py +++ b/tests/model_forms/models.py @@ -17,7 +17,6 @@ from django.core.files.storage import FileSystemStorage from django.db import models from django.utils import six from django.utils._os import upath -from django.utils.encoding import python_2_unicode_compatible from django.utils.six.moves import range temp_storage_dir = tempfile.mkdtemp() @@ -40,7 +39,6 @@ class Person(models.Model): name = models.CharField(max_length=100) -@python_2_unicode_compatible class Category(models.Model): name = models.CharField(max_length=20) slug = models.SlugField(max_length=20) @@ -53,7 +51,6 @@ class Category(models.Model): return self.__str__() -@python_2_unicode_compatible class Writer(models.Model): name = models.CharField(max_length=50, help_text='Use both first and last names.') @@ -64,7 +61,6 @@ class Writer(models.Model): return self.name -@python_2_unicode_compatible class Article(models.Model): headline = models.CharField(max_length=50) slug = models.SlugField() @@ -96,7 +92,6 @@ class BetterWriter(Writer): score = models.IntegerField() -@python_2_unicode_compatible class Publication(models.Model): title = models.CharField(max_length=30) date_published = models.DateField() @@ -135,7 +130,6 @@ class Author1(models.Model): full_name = models.CharField(max_length=255) -@python_2_unicode_compatible class WriterProfile(models.Model): writer = models.OneToOneField(Writer, models.CASCADE, primary_key=True) age = models.PositiveIntegerField() @@ -148,7 +142,6 @@ class Document(models.Model): myfile = models.FileField(upload_to='unused', blank=True) -@python_2_unicode_compatible class TextFile(models.Model): description = models.CharField(max_length=20) file = models.FileField(storage=temp_storage, upload_to='tests', max_length=15) @@ -177,7 +170,6 @@ try: test_images = True - @python_2_unicode_compatible class ImageFile(models.Model): def custom_upload_path(self, filename): path = self.path or 'tests' @@ -196,7 +188,6 @@ try: def __str__(self): return self.description - @python_2_unicode_compatible class OptionalImageFile(models.Model): def custom_upload_path(self, filename): path = self.path or 'tests' @@ -220,7 +211,6 @@ class Homepage(models.Model): url = models.URLField() -@python_2_unicode_compatible class Product(models.Model): slug = models.SlugField(unique=True) @@ -228,7 +218,6 @@ class Product(models.Model): return self.slug -@python_2_unicode_compatible class Price(models.Model): price = models.DecimalField(max_digits=10, decimal_places=2) quantity = models.PositiveIntegerField() @@ -253,7 +242,6 @@ class ArticleStatus(models.Model): status = models.CharField(max_length=2, choices=ARTICLE_STATUS_CHAR, blank=True, null=True) -@python_2_unicode_compatible class Inventory(models.Model): barcode = models.PositiveIntegerField(unique=True) parent = models.ForeignKey('self', models.SET_NULL, to_field='barcode', blank=True, null=True) @@ -292,7 +280,6 @@ class DerivedBook(Book, BookXtra): pass -@python_2_unicode_compatible class ExplicitPK(models.Model): key = models.CharField(max_length=20, primary_key=True) desc = models.CharField(max_length=20, blank=True, unique=True) @@ -304,7 +291,6 @@ class ExplicitPK(models.Model): return self.key -@python_2_unicode_compatible class Post(models.Model): title = models.CharField(max_length=50, unique_for_date='posted', blank=True) slug = models.CharField(max_length=50, unique_for_year='posted', blank=True) @@ -315,7 +301,6 @@ class Post(models.Model): return self.title -@python_2_unicode_compatible class DateTimePost(models.Model): title = models.CharField(max_length=50, unique_for_date='posted', blank=True) slug = models.CharField(max_length=50, unique_for_year='posted', blank=True) @@ -330,7 +315,6 @@ class DerivedPost(Post): pass -@python_2_unicode_compatible class BigInt(models.Model): biggie = models.BigIntegerField() @@ -363,7 +347,6 @@ class FlexibleDatePost(models.Model): posted = models.DateField(blank=True, null=True) -@python_2_unicode_compatible class Colour(models.Model): name = models.CharField(max_length=50) diff --git a/tests/model_formsets/models.py b/tests/model_formsets/models.py index 421d873704..b7b1f1edb9 100644 --- a/tests/model_formsets/models.py +++ b/tests/model_formsets/models.py @@ -3,10 +3,8 @@ import uuid from django.db import models from django.utils import six -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Author(models.Model): name = models.CharField(max_length=100) @@ -21,7 +19,6 @@ class BetterAuthor(Author): write_speed = models.IntegerField() -@python_2_unicode_compatible class Book(models.Model): author = models.ForeignKey(Author, models.CASCADE) title = models.CharField(max_length=100) @@ -40,7 +37,6 @@ class Book(models.Model): assert self.author.name is not None -@python_2_unicode_compatible class BookWithCustomPK(models.Model): my_pk = models.DecimalField(max_digits=5, decimal_places=0, primary_key=True) author = models.ForeignKey(Author, models.CASCADE) @@ -54,7 +50,6 @@ class Editor(models.Model): name = models.CharField(max_length=100) -@python_2_unicode_compatible class BookWithOptionalAltEditor(models.Model): author = models.ForeignKey(Author, models.CASCADE) # Optional secondary author @@ -70,7 +65,6 @@ class BookWithOptionalAltEditor(models.Model): return self.title -@python_2_unicode_compatible class AlternateBook(Book): notes = models.CharField(max_length=100) @@ -78,7 +72,6 @@ class AlternateBook(Book): return '%s - %s' % (self.title, self.notes) -@python_2_unicode_compatible class AuthorMeeting(models.Model): name = models.CharField(max_length=100) authors = models.ManyToManyField(Author) @@ -96,7 +89,6 @@ class CustomPrimaryKey(models.Model): # models for inheritance tests. -@python_2_unicode_compatible class Place(models.Model): name = models.CharField(max_length=50) city = models.CharField(max_length=50) @@ -105,7 +97,6 @@ class Place(models.Model): return self.name -@python_2_unicode_compatible class Owner(models.Model): auto_id = models.AutoField(primary_key=True) name = models.CharField(max_length=100) @@ -122,7 +113,6 @@ class Location(models.Model): lon = models.CharField(max_length=100) -@python_2_unicode_compatible class OwnerProfile(models.Model): owner = models.OneToOneField(Owner, models.CASCADE, primary_key=True) age = models.PositiveIntegerField() @@ -131,7 +121,6 @@ class OwnerProfile(models.Model): return "%s is %d" % (self.owner.name, self.age) -@python_2_unicode_compatible class Restaurant(Place): serves_pizza = models.BooleanField(default=False) @@ -139,7 +128,6 @@ class Restaurant(Place): return self.name -@python_2_unicode_compatible class Product(models.Model): slug = models.SlugField(unique=True) @@ -147,7 +135,6 @@ class Product(models.Model): return self.slug -@python_2_unicode_compatible class Price(models.Model): price = models.DecimalField(max_digits=10, decimal_places=2) quantity = models.PositiveIntegerField() @@ -170,7 +157,6 @@ class ClassyMexicanRestaurant(MexicanRestaurant): # models for testing unique_together validation when a fk is involved and # using inlineformset_factory. -@python_2_unicode_compatible class Repository(models.Model): name = models.CharField(max_length=25) @@ -178,7 +164,6 @@ class Repository(models.Model): return self.name -@python_2_unicode_compatible class Revision(models.Model): repository = models.ForeignKey(Repository, models.CASCADE) revision = models.CharField(max_length=40) @@ -208,7 +193,6 @@ class Team(models.Model): name = models.CharField(max_length=100) -@python_2_unicode_compatible class Player(models.Model): team = models.ForeignKey(Team, models.SET_NULL, null=True) name = models.CharField(max_length=100) @@ -218,7 +202,6 @@ class Player(models.Model): # Models for testing custom ModelForm save methods in formsets and inline formsets -@python_2_unicode_compatible class Poet(models.Model): name = models.CharField(max_length=100) @@ -226,7 +209,6 @@ class Poet(models.Model): return self.name -@python_2_unicode_compatible class Poem(models.Model): poet = models.ForeignKey(Poet, models.CASCADE) name = models.CharField(max_length=100) @@ -235,7 +217,6 @@ class Poem(models.Model): return self.name -@python_2_unicode_compatible class Post(models.Model): title = models.CharField(max_length=50, unique_for_date='posted', blank=True) slug = models.CharField(max_length=50, unique_for_year='posted', blank=True) diff --git a/tests/model_formsets_regress/models.py b/tests/model_formsets_regress/models.py index 064cddd4a0..29d1194bc2 100644 --- a/tests/model_formsets_regress/models.py +++ b/tests/model_formsets_regress/models.py @@ -1,5 +1,4 @@ from django.db import models -from django.utils.encoding import python_2_unicode_compatible class User(models.Model): @@ -40,7 +39,6 @@ class Network(models.Model): name = models.CharField(max_length=15) -@python_2_unicode_compatible class Host(models.Model): network = models.ForeignKey(Network, models.CASCADE) hostname = models.CharField(max_length=25) diff --git a/tests/model_inheritance/models.py b/tests/model_inheritance/models.py index 4c7d4a7c8a..44bf752d00 100644 --- a/tests/model_inheritance/models.py +++ b/tests/model_inheritance/models.py @@ -12,7 +12,6 @@ Model inheritance exists in two varieties: Both styles are demonstrated here. """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible # @@ -20,7 +19,6 @@ from django.utils.encoding import python_2_unicode_compatible # -@python_2_unicode_compatible class CommonInfo(models.Model): name = models.CharField(max_length=50) age = models.PositiveIntegerField() @@ -52,7 +50,6 @@ class Post(models.Model): title = models.CharField(max_length=50) -@python_2_unicode_compatible class Attachment(models.Model): post = models.ForeignKey( Post, @@ -81,7 +78,6 @@ class Link(Attachment): # Multi-table inheritance # -@python_2_unicode_compatible class Chef(models.Model): name = models.CharField(max_length=50) @@ -89,7 +85,6 @@ class Chef(models.Model): return "%s the chef" % self.name -@python_2_unicode_compatible class Place(models.Model): name = models.CharField(max_length=50) address = models.CharField(max_length=80) @@ -106,7 +101,6 @@ class Rating(models.Model): ordering = ['-rating'] -@python_2_unicode_compatible class Restaurant(Place, Rating): serves_hot_dogs = models.BooleanField(default=False) serves_pizza = models.BooleanField(default=False) @@ -119,7 +113,6 @@ class Restaurant(Place, Rating): return "%s the restaurant" % self.name -@python_2_unicode_compatible class ItalianRestaurant(Restaurant): serves_gnocchi = models.BooleanField(default=False) @@ -127,7 +120,6 @@ class ItalianRestaurant(Restaurant): return "%s the italian restaurant" % self.name -@python_2_unicode_compatible class Supplier(Place): customers = models.ManyToManyField(Restaurant, related_name='provider') @@ -135,7 +127,6 @@ class Supplier(Place): return "%s the supplier" % self.name -@python_2_unicode_compatible class ParkingLot(Place): # An explicit link to the parent (we can control the attribute name). parent = models.OneToOneField(Place, models.CASCADE, primary_key=True, parent_link=True) diff --git a/tests/model_inheritance_regress/models.py b/tests/model_inheritance_regress/models.py index 69ce0d9e2b..358217554b 100644 --- a/tests/model_inheritance_regress/models.py +++ b/tests/model_inheritance_regress/models.py @@ -1,10 +1,8 @@ import datetime from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Place(models.Model): name = models.CharField(max_length=50) address = models.CharField(max_length=80) @@ -16,7 +14,6 @@ class Place(models.Model): return "%s the place" % self.name -@python_2_unicode_compatible class Restaurant(Place): serves_hot_dogs = models.BooleanField(default=False) serves_pizza = models.BooleanField(default=False) @@ -25,7 +22,6 @@ class Restaurant(Place): return "%s the restaurant" % self.name -@python_2_unicode_compatible class ItalianRestaurant(Restaurant): serves_gnocchi = models.BooleanField(default=False) @@ -33,7 +29,6 @@ class ItalianRestaurant(Restaurant): return "%s the italian restaurant" % self.name -@python_2_unicode_compatible class ParkingLot(Place): # An explicit link to the parent (we can control the attribute name). parent = models.OneToOneField(Place, models.CASCADE, primary_key=True, parent_link=True) @@ -65,7 +60,6 @@ class ParkingLot4B(Place, ParkingLot4): pass -@python_2_unicode_compatible class Supplier(models.Model): name = models.CharField(max_length=50) restaurant = models.ForeignKey(Restaurant, models.CASCADE) @@ -95,7 +89,6 @@ class SelfRefChild(SelfRefParent): child_data = models.IntegerField() -@python_2_unicode_compatible class Article(models.Model): headline = models.CharField(max_length=100) pub_date = models.DateTimeField() @@ -130,7 +123,6 @@ class QualityControl(Evaluation): assignee = models.CharField(max_length=50) -@python_2_unicode_compatible class BaseM(models.Model): base_name = models.CharField(max_length=100) @@ -138,7 +130,6 @@ class BaseM(models.Model): return self.base_name -@python_2_unicode_compatible class DerivedM(BaseM): customPK = models.IntegerField(primary_key=True) derived_name = models.CharField(max_length=100) @@ -166,7 +157,6 @@ class InternalCertificationAudit(CertificationAudit): # Abstract classes don't get m2m tables autocreated. -@python_2_unicode_compatible class Person(models.Model): name = models.CharField(max_length=100) @@ -177,7 +167,6 @@ class Person(models.Model): return self.name -@python_2_unicode_compatible class AbstractEvent(models.Model): name = models.CharField(max_length=100) attendees = models.ManyToManyField(Person, related_name="%(class)s_set") diff --git a/tests/model_regress/models.py b/tests/model_regress/models.py index 147116d7e2..3208db90b8 100644 --- a/tests/model_regress/models.py +++ b/tests/model_regress/models.py @@ -1,5 +1,4 @@ from django.db import models -from django.utils.encoding import python_2_unicode_compatible CHOICES = ( (1, 'first'), @@ -7,7 +6,6 @@ CHOICES = ( ) -@python_2_unicode_compatible class Article(models.Model): headline = models.CharField(max_length=100, default='Default headline') pub_date = models.DateTimeField() @@ -38,7 +36,6 @@ class Event(models.Model): when = models.DateTimeField() -@python_2_unicode_compatible class Department(models.Model): id = models.PositiveIntegerField(primary_key=True) name = models.CharField(max_length=200) @@ -47,7 +44,6 @@ class Department(models.Model): return self.name -@python_2_unicode_compatible class Worker(models.Model): department = models.ForeignKey(Department, models.CASCADE) name = models.CharField(max_length=200) @@ -56,7 +52,6 @@ class Worker(models.Model): return self.name -@python_2_unicode_compatible class BrokenUnicodeMethod(models.Model): name = models.CharField(max_length=7) diff --git a/tests/modeladmin/models.py b/tests/modeladmin/models.py index 64cc86aa66..861a2dbb9d 100644 --- a/tests/modeladmin/models.py +++ b/tests/modeladmin/models.py @@ -1,9 +1,7 @@ from django.contrib.auth.models import User from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Band(models.Model): name = models.CharField(max_length=100) bio = models.TextField() diff --git a/tests/multiple_database/models.py b/tests/multiple_database/models.py index 367cd31d63..55247f6e18 100644 --- a/tests/multiple_database/models.py +++ b/tests/multiple_database/models.py @@ -4,10 +4,8 @@ from django.contrib.contenttypes.fields import ( ) from django.contrib.contenttypes.models import ContentType from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Review(models.Model): source = models.CharField(max_length=100) content_type = models.ForeignKey(ContentType, models.CASCADE) @@ -26,7 +24,6 @@ class PersonManager(models.Manager): return self.get(name=name) -@python_2_unicode_compatible class Person(models.Model): objects = PersonManager() name = models.CharField(max_length=100) @@ -52,7 +49,6 @@ class BookManager(models.Manager): return super(BookManager, self).get_or_create(*args, **kwargs) -@python_2_unicode_compatible class Book(models.Model): objects = BookManager() title = models.CharField(max_length=100) @@ -69,7 +65,6 @@ class Book(models.Model): ordering = ('title',) -@python_2_unicode_compatible class Pet(models.Model): name = models.CharField(max_length=100) owner = models.ForeignKey(Person, models.CASCADE) diff --git a/tests/null_fk/models.py b/tests/null_fk/models.py index 6a7da8f620..5ebce93a65 100644 --- a/tests/null_fk/models.py +++ b/tests/null_fk/models.py @@ -3,7 +3,6 @@ Regression tests for proper working of ForeignKey(null=True). """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible class SystemDetails(models.Model): @@ -20,7 +19,6 @@ class Forum(models.Model): forum_name = models.CharField(max_length=32) -@python_2_unicode_compatible class Post(models.Model): forum = models.ForeignKey(Forum, models.SET_NULL, null=True) title = models.CharField(max_length=32) @@ -29,7 +27,6 @@ class Post(models.Model): return self.title -@python_2_unicode_compatible class Comment(models.Model): post = models.ForeignKey(Post, models.SET_NULL, null=True) comment_text = models.CharField(max_length=250) diff --git a/tests/null_fk_ordering/models.py b/tests/null_fk_ordering/models.py index e65c227f88..a7938cec54 100644 --- a/tests/null_fk_ordering/models.py +++ b/tests/null_fk_ordering/models.py @@ -6,7 +6,6 @@ unexpected results """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible # The first two models represent a very simple null FK ordering case. @@ -14,7 +13,6 @@ class Author(models.Model): name = models.CharField(max_length=150) -@python_2_unicode_compatible class Article(models.Model): title = models.CharField(max_length=150) author = models.ForeignKey(Author, models.SET_NULL, null=True) @@ -36,7 +34,6 @@ class Forum(models.Model): forum_name = models.CharField(max_length=32) -@python_2_unicode_compatible class Post(models.Model): forum = models.ForeignKey(Forum, models.SET_NULL, null=True) title = models.CharField(max_length=32) @@ -45,7 +42,6 @@ class Post(models.Model): return self.title -@python_2_unicode_compatible class Comment(models.Model): post = models.ForeignKey(Post, models.SET_NULL, null=True) comment_text = models.CharField(max_length=250) diff --git a/tests/null_queries/models.py b/tests/null_queries/models.py index b40f4539b3..f2d4caa745 100644 --- a/tests/null_queries/models.py +++ b/tests/null_queries/models.py @@ -1,8 +1,6 @@ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Poll(models.Model): question = models.CharField(max_length=200) @@ -10,7 +8,6 @@ class Poll(models.Model): return "Q: %s " % self.question -@python_2_unicode_compatible class Choice(models.Model): poll = models.ForeignKey(Poll, models.CASCADE) choice = models.CharField(max_length=200) diff --git a/tests/one_to_one/models.py b/tests/one_to_one/models.py index c58114dce8..263633347d 100644 --- a/tests/one_to_one/models.py +++ b/tests/one_to_one/models.py @@ -6,10 +6,8 @@ To define a one-to-one relationship, use ``OneToOneField()``. In this example, a ``Place`` optionally can be a ``Restaurant``. """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Place(models.Model): name = models.CharField(max_length=50) address = models.CharField(max_length=80) @@ -18,7 +16,6 @@ class Place(models.Model): return "%s the place" % self.name -@python_2_unicode_compatible class Restaurant(models.Model): place = models.OneToOneField(Place, models.CASCADE, primary_key=True) serves_hot_dogs = models.BooleanField(default=False) @@ -28,7 +25,6 @@ class Restaurant(models.Model): return "%s the restaurant" % self.place.name -@python_2_unicode_compatible class Bar(models.Model): place = models.OneToOneField(Place, models.CASCADE) serves_cocktails = models.BooleanField(default=True) @@ -42,7 +38,6 @@ class UndergroundBar(models.Model): serves_cocktails = models.BooleanField(default=True) -@python_2_unicode_compatible class Waiter(models.Model): restaurant = models.ForeignKey(Restaurant, models.CASCADE) name = models.CharField(max_length=50) @@ -51,7 +46,6 @@ class Waiter(models.Model): return "%s the waiter at %s" % (self.name, self.restaurant) -@python_2_unicode_compatible class Favorites(models.Model): name = models.CharField(max_length=50) restaurants = models.ManyToManyField(Restaurant) @@ -70,7 +64,6 @@ class RelatedModel(models.Model): name = models.CharField(max_length=50) -@python_2_unicode_compatible class MultiModel(models.Model): link1 = models.OneToOneField(Place, models.CASCADE) link2 = models.OneToOneField(ManualPrimaryKey, models.CASCADE) diff --git a/tests/or_lookups/models.py b/tests/or_lookups/models.py index 7dea8cd49e..efe70ab8dd 100644 --- a/tests/or_lookups/models.py +++ b/tests/or_lookups/models.py @@ -10,10 +10,8 @@ clauses using the variable ``django.db.models.Q`` (or any object with an """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Article(models.Model): headline = models.CharField(max_length=50) pub_date = models.DateTimeField() diff --git a/tests/order_with_respect_to/models.py b/tests/order_with_respect_to/models.py index 17c09dfeae..8f50b42252 100644 --- a/tests/order_with_respect_to/models.py +++ b/tests/order_with_respect_to/models.py @@ -4,14 +4,12 @@ Tests for the order_with_respect_to Meta attribute. from django.db import models from django.utils import six -from django.utils.encoding import python_2_unicode_compatible class Question(models.Model): text = models.CharField(max_length=200) -@python_2_unicode_compatible class Answer(models.Model): text = models.CharField(max_length=200) question = models.ForeignKey(Question, models.CASCADE) @@ -23,7 +21,6 @@ class Answer(models.Model): return six.text_type(self.text) -@python_2_unicode_compatible class Post(models.Model): title = models.CharField(max_length=200) parent = models.ForeignKey("self", models.SET_NULL, related_name="children", null=True) diff --git a/tests/ordering/models.py b/tests/ordering/models.py index 1f794ca3a1..d3024f5fc0 100644 --- a/tests/ordering/models.py +++ b/tests/ordering/models.py @@ -14,7 +14,6 @@ undefined -- not random, just undefined. """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible class Author(models.Model): @@ -24,7 +23,6 @@ class Author(models.Model): ordering = ('-pk',) -@python_2_unicode_compatible class Article(models.Model): author = models.ForeignKey(Author, models.SET_NULL, null=True) second_author = models.ForeignKey(Author, models.SET_NULL, null=True, related_name='+') diff --git a/tests/pagination/models.py b/tests/pagination/models.py index 9dc8d4b776..d84dd42ee6 100644 --- a/tests/pagination/models.py +++ b/tests/pagination/models.py @@ -1,8 +1,6 @@ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Article(models.Model): headline = models.CharField(max_length=100, default='Default headline') pub_date = models.DateTimeField() diff --git a/tests/prefetch_related/models.py b/tests/prefetch_related/models.py index 064ce1dfbd..c995acb684 100644 --- a/tests/prefetch_related/models.py +++ b/tests/prefetch_related/models.py @@ -5,13 +5,11 @@ from django.contrib.contenttypes.fields import ( ) from django.contrib.contenttypes.models import ContentType from django.db import models -from django.utils.encoding import python_2_unicode_compatible from django.utils.functional import cached_property # Basic tests -@python_2_unicode_compatible class Author(models.Model): name = models.CharField(max_length=50, unique=True) first_book = models.ForeignKey('Book', models.CASCADE, related_name='first_time_authors') @@ -38,7 +36,6 @@ class FavoriteAuthors(models.Model): ordering = ['id'] -@python_2_unicode_compatible class AuthorAddress(models.Model): author = models.ForeignKey(Author, models.CASCADE, to_field='name', related_name='addresses') address = models.TextField() @@ -50,7 +47,6 @@ class AuthorAddress(models.Model): return self.address -@python_2_unicode_compatible class Book(models.Model): title = models.CharField(max_length=255) authors = models.ManyToManyField(Author, related_name='books') @@ -74,7 +70,6 @@ class Bio(models.Model): books = models.ManyToManyField(Book, blank=True) -@python_2_unicode_compatible class Reader(models.Model): name = models.CharField(max_length=50) books_read = models.ManyToManyField(Book, related_name='read_by') @@ -105,7 +100,6 @@ class TeacherManager(models.Manager): return super(TeacherManager, self).get_queryset().prefetch_related('qualifications') -@python_2_unicode_compatible class Teacher(models.Model): name = models.CharField(max_length=50) qualifications = models.ManyToManyField(Qualification) @@ -129,7 +123,6 @@ class Department(models.Model): # GenericRelation/GenericForeignKey tests -@python_2_unicode_compatible class TaggedItem(models.Model): tag = models.SlugField() content_type = models.ForeignKey( @@ -230,7 +223,6 @@ class Person(models.Model): # Models for nullable FK tests -@python_2_unicode_compatible class Employee(models.Model): name = models.CharField(max_length=50) boss = models.ForeignKey('self', models.SET_NULL, null=True, related_name='serfs') @@ -244,7 +236,6 @@ class Employee(models.Model): # Ticket #19607 -@python_2_unicode_compatible class LessonEntry(models.Model): name1 = models.CharField(max_length=200) name2 = models.CharField(max_length=200) @@ -253,7 +244,6 @@ class LessonEntry(models.Model): return "%s %s" % (self.name1, self.name2) -@python_2_unicode_compatible class WordEntry(models.Model): lesson_entry = models.ForeignKey(LessonEntry, models.CASCADE) name = models.CharField(max_length=200) @@ -264,7 +254,6 @@ class WordEntry(models.Model): # Ticket #21410: Regression when related_name="+" -@python_2_unicode_compatible class Author2(models.Model): name = models.CharField(max_length=50, unique=True) first_book = models.ForeignKey('Book', models.CASCADE, related_name='first_time_authors+') diff --git a/tests/proxy_models/models.py b/tests/proxy_models/models.py index 6960042d78..93430d615f 100644 --- a/tests/proxy_models/models.py +++ b/tests/proxy_models/models.py @@ -5,7 +5,6 @@ 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. """ 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. @@ -21,7 +20,6 @@ class SubManager(models.Manager): return super(SubManager, self).get_queryset().exclude(name="wilma") -@python_2_unicode_compatible class Person(models.Model): """ A simple concrete base class. @@ -101,7 +99,6 @@ class LowerStatusPerson(MyPersonProxy): objects = models.Manager() -@python_2_unicode_compatible class User(models.Model): name = models.CharField(max_length=100) @@ -135,7 +132,6 @@ class Country(models.Model): name = models.CharField(max_length=50) -@python_2_unicode_compatible class State(models.Model): name = models.CharField(max_length=50) country = models.ForeignKey(Country, models.CASCADE) @@ -152,7 +148,6 @@ class StateProxy(State): # and select_related, even when mixed with model inheritance -@python_2_unicode_compatible class BaseUser(models.Model): name = models.CharField(max_length=255) @@ -169,7 +164,6 @@ class ProxyTrackerUser(TrackerUser): proxy = True -@python_2_unicode_compatible class Issue(models.Model): summary = models.CharField(max_length=255) assignee = models.ForeignKey(ProxyTrackerUser, models.CASCADE, related_name='issues') diff --git a/tests/queries/models.py b/tests/queries/models.py index 8c1ba59b67..4d5ed14ff0 100644 --- a/tests/queries/models.py +++ b/tests/queries/models.py @@ -5,7 +5,6 @@ import threading from django.db import models from django.utils import six -from django.utils.encoding import python_2_unicode_compatible class DumbCategory(models.Model): @@ -17,7 +16,6 @@ class ProxyCategory(DumbCategory): proxy = True -@python_2_unicode_compatible class NamedCategory(DumbCategory): name = models.CharField(max_length=10) @@ -25,7 +23,6 @@ class NamedCategory(DumbCategory): return self.name -@python_2_unicode_compatible class Tag(models.Model): name = models.CharField(max_length=10) parent = models.ForeignKey( @@ -43,7 +40,6 @@ class Tag(models.Model): return self.name -@python_2_unicode_compatible class Note(models.Model): note = models.CharField(max_length=100) misc = models.CharField(max_length=10) @@ -63,7 +59,6 @@ class Note(models.Model): self.lock = threading.Lock() -@python_2_unicode_compatible class Annotation(models.Model): name = models.CharField(max_length=10) tag = models.ForeignKey(Tag, models.CASCADE) @@ -73,7 +68,6 @@ class Annotation(models.Model): return self.name -@python_2_unicode_compatible class ExtraInfo(models.Model): info = models.CharField(max_length=100) note = models.ForeignKey(Note, models.CASCADE) @@ -86,7 +80,6 @@ class ExtraInfo(models.Model): return self.info -@python_2_unicode_compatible class Author(models.Model): name = models.CharField(max_length=10) num = models.IntegerField(unique=True) @@ -99,7 +92,6 @@ class Author(models.Model): return self.name -@python_2_unicode_compatible class Item(models.Model): name = models.CharField(max_length=10) created = models.DateTimeField() @@ -115,7 +107,6 @@ class Item(models.Model): return self.name -@python_2_unicode_compatible class Report(models.Model): name = models.CharField(max_length=10) creator = models.ForeignKey(Author, models.SET_NULL, to_field='num', null=True) @@ -124,7 +115,6 @@ class Report(models.Model): return self.name -@python_2_unicode_compatible class Ranking(models.Model): rank = models.IntegerField() author = models.ForeignKey(Author, models.CASCADE) @@ -137,7 +127,6 @@ class Ranking(models.Model): return '%d: %s' % (self.rank, self.author.name) -@python_2_unicode_compatible class Cover(models.Model): title = models.CharField(max_length=50) item = models.ForeignKey(Item, models.CASCADE) @@ -149,7 +138,6 @@ class Cover(models.Model): return self.title -@python_2_unicode_compatible class Number(models.Model): num = models.IntegerField() @@ -212,7 +200,6 @@ class CustomManager(models.Manager): return qs.filter(public=True, tag__name='t1') -@python_2_unicode_compatible class ManagedModel(models.Model): data = models.CharField(max_length=10) tag = models.ForeignKey(Tag, models.CASCADE) @@ -271,7 +258,6 @@ class CustomPkTag(models.Model): # path to another model, and a return path from that model. -@python_2_unicode_compatible class Celebrity(models.Model): name = models.CharField("Name", max_length=20) greatest_fan = models.ForeignKey("Fan", models.SET_NULL, null=True, unique=True) @@ -290,7 +276,6 @@ class Fan(models.Model): # Multiple foreign keys -@python_2_unicode_compatible class LeafA(models.Model): data = models.CharField(max_length=10) @@ -307,7 +292,6 @@ class Join(models.Model): b = models.ForeignKey(LeafB, models.CASCADE) -@python_2_unicode_compatible class ReservedName(models.Model): name = models.CharField(max_length=20) order = models.IntegerField() @@ -318,7 +302,6 @@ class ReservedName(models.Model): # A simpler shared-foreign-key setup that can expose some problems. -@python_2_unicode_compatible class SharedConnection(models.Model): data = models.CharField(max_length=10) @@ -336,7 +319,6 @@ class PointerB(models.Model): # Multi-layer ordering -@python_2_unicode_compatible class SingleObject(models.Model): name = models.CharField(max_length=10) @@ -355,7 +337,6 @@ class RelatedObject(models.Model): ordering = ['single'] -@python_2_unicode_compatible class Plaything(models.Model): name = models.CharField(max_length=10) others = models.ForeignKey(RelatedObject, models.SET_NULL, null=True) @@ -367,7 +348,6 @@ class Plaything(models.Model): return self.name -@python_2_unicode_compatible class Article(models.Model): name = models.CharField(max_length=20) created = models.DateTimeField() @@ -376,7 +356,6 @@ class Article(models.Model): return self.name -@python_2_unicode_compatible class Food(models.Model): name = models.CharField(max_length=20, unique=True) @@ -384,7 +363,6 @@ class Food(models.Model): return self.name -@python_2_unicode_compatible class Eaten(models.Model): food = models.ForeignKey(Food, models.SET_NULL, to_field="name", null=True) meal = models.CharField(max_length=20) @@ -393,7 +371,6 @@ class Eaten(models.Model): return "%s at %s" % (self.food, self.meal) -@python_2_unicode_compatible class Node(models.Model): num = models.IntegerField(unique=True) parent = models.ForeignKey("self", models.SET_NULL, to_field="num", null=True) @@ -404,7 +381,6 @@ class Node(models.Model): # Bug #12252 -@python_2_unicode_compatible class ObjectA(models.Model): name = models.CharField(max_length=50) @@ -425,7 +401,6 @@ class ChildObjectA(ObjectA): pass -@python_2_unicode_compatible class ObjectB(models.Model): name = models.CharField(max_length=50) objecta = models.ForeignKey(ObjectA, models.CASCADE) @@ -440,7 +415,6 @@ class ProxyObjectB(ObjectB): proxy = True -@python_2_unicode_compatible class ObjectC(models.Model): name = models.CharField(max_length=50) objecta = models.ForeignKey(ObjectA, models.SET_NULL, null=True) @@ -451,7 +425,6 @@ class ObjectC(models.Model): return self.name -@python_2_unicode_compatible class SimpleCategory(models.Model): name = models.CharField(max_length=15) @@ -459,7 +432,6 @@ class SimpleCategory(models.Model): return self.name -@python_2_unicode_compatible class SpecialCategory(SimpleCategory): special_name = models.CharField(max_length=15) @@ -467,7 +439,6 @@ class SpecialCategory(SimpleCategory): return self.name + " " + self.special_name -@python_2_unicode_compatible class CategoryItem(models.Model): category = models.ForeignKey(SimpleCategory, models.CASCADE) @@ -475,7 +446,6 @@ class CategoryItem(models.Model): return "category item: " + str(self.category) -@python_2_unicode_compatible class OneToOneCategory(models.Model): new_name = models.CharField(max_length=15) category = models.OneToOneField(SimpleCategory, models.CASCADE) @@ -515,7 +485,6 @@ class ModelA(models.Model): d = models.ForeignKey(ModelD, models.CASCADE) -@python_2_unicode_compatible class Job(models.Model): name = models.CharField(max_length=20, unique=True) @@ -528,7 +497,6 @@ class JobResponsibilities(models.Model): responsibility = models.ForeignKey('Responsibility', models.CASCADE, to_field='description') -@python_2_unicode_compatible class Responsibility(models.Model): description = models.CharField(max_length=20, unique=True) jobs = models.ManyToManyField(Job, through=JobResponsibilities, @@ -561,7 +529,6 @@ class BaseA(models.Model): c = models.ForeignKey(FK3, models.SET_NULL, null=True) -@python_2_unicode_compatible class Identifier(models.Model): name = models.CharField(max_length=100) @@ -605,7 +572,6 @@ class MyObject(models.Model): # Models for #17600 regressions -@python_2_unicode_compatible class Order(models.Model): id = models.IntegerField(primary_key=True) @@ -616,7 +582,6 @@ class Order(models.Model): return '%s' % self.pk -@python_2_unicode_compatible class OrderItem(models.Model): order = models.ForeignKey(Order, models.CASCADE, related_name='items') status = models.IntegerField() @@ -632,7 +597,6 @@ class BaseUser(models.Model): pass -@python_2_unicode_compatible class Task(models.Model): title = models.CharField(max_length=10) owner = models.ForeignKey(BaseUser, models.CASCADE, related_name='owner') @@ -642,7 +606,6 @@ class Task(models.Model): return self.title -@python_2_unicode_compatible class Staff(models.Model): name = models.CharField(max_length=10) @@ -650,7 +613,6 @@ class Staff(models.Model): return self.name -@python_2_unicode_compatible class StaffUser(BaseUser): staff = models.OneToOneField(Staff, models.CASCADE, related_name='user') @@ -673,7 +635,6 @@ class Person(models.Model): name = models.CharField(max_length=128) -@python_2_unicode_compatible class Company(models.Model): name = models.CharField(max_length=128) employees = models.ManyToManyField(Person, related_name='employers', through='Employment') diff --git a/tests/reserved_names/models.py b/tests/reserved_names/models.py index e3806ab550..4548f78e7e 100644 --- a/tests/reserved_names/models.py +++ b/tests/reserved_names/models.py @@ -8,10 +8,8 @@ reserved-name usage. """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Thing(models.Model): when = models.CharField(max_length=1, primary_key=True) join = models.CharField(max_length=1) diff --git a/tests/reverse_lookup/models.py b/tests/reverse_lookup/models.py index 51e879bf68..e7db427255 100644 --- a/tests/reverse_lookup/models.py +++ b/tests/reverse_lookup/models.py @@ -5,10 +5,8 @@ This demonstrates the reverse lookup features of the database API. """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class User(models.Model): name = models.CharField(max_length=200) @@ -16,7 +14,6 @@ class User(models.Model): return self.name -@python_2_unicode_compatible class Poll(models.Model): question = models.CharField(max_length=200) creator = models.ForeignKey(User, models.CASCADE) @@ -25,7 +22,6 @@ class Poll(models.Model): return self.question -@python_2_unicode_compatible class Choice(models.Model): name = models.CharField(max_length=100) poll = models.ForeignKey(Poll, models.CASCADE, related_name="poll_choice") diff --git a/tests/save_delete_hooks/models.py b/tests/save_delete_hooks/models.py index 3d229daada..3573112cfa 100644 --- a/tests/save_delete_hooks/models.py +++ b/tests/save_delete_hooks/models.py @@ -5,10 +5,8 @@ To execute arbitrary code around ``save()`` and ``delete()``, just subclass the methods. """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Person(models.Model): first_name = models.CharField(max_length=20) last_name = models.CharField(max_length=20) diff --git a/tests/schema/models.py b/tests/schema/models.py index 7d13c775a3..e8a5f1c20f 100644 --- a/tests/schema/models.py +++ b/tests/schema/models.py @@ -1,6 +1,5 @@ from django.apps.registry import Apps from django.db import models -from django.utils.encoding import python_2_unicode_compatible # Because we want to test creation and deletion of these as separate things, # these models are all inserted into a separate Apps so the main test @@ -160,7 +159,6 @@ class TagUniqueRename(models.Model): # Based on tests/reserved_names/models.py -@python_2_unicode_compatible class Thing(models.Model): when = models.CharField(max_length=1, primary_key=True) diff --git a/tests/select_related/models.py b/tests/select_related/models.py index bef2873731..c8ecf831ba 100644 --- a/tests/select_related/models.py +++ b/tests/select_related/models.py @@ -12,13 +12,11 @@ from django.contrib.contenttypes.fields import ( ) from django.contrib.contenttypes.models import ContentType from django.db import models -from django.utils.encoding import python_2_unicode_compatible # Who remembers high school biology? -@python_2_unicode_compatible class Domain(models.Model): name = models.CharField(max_length=50) @@ -26,7 +24,6 @@ class Domain(models.Model): return self.name -@python_2_unicode_compatible class Kingdom(models.Model): name = models.CharField(max_length=50) domain = models.ForeignKey(Domain, models.CASCADE) @@ -35,7 +32,6 @@ class Kingdom(models.Model): return self.name -@python_2_unicode_compatible class Phylum(models.Model): name = models.CharField(max_length=50) kingdom = models.ForeignKey(Kingdom, models.CASCADE) @@ -44,7 +40,6 @@ class Phylum(models.Model): return self.name -@python_2_unicode_compatible class Klass(models.Model): name = models.CharField(max_length=50) phylum = models.ForeignKey(Phylum, models.CASCADE) @@ -53,7 +48,6 @@ class Klass(models.Model): return self.name -@python_2_unicode_compatible class Order(models.Model): name = models.CharField(max_length=50) klass = models.ForeignKey(Klass, models.CASCADE) @@ -62,7 +56,6 @@ class Order(models.Model): return self.name -@python_2_unicode_compatible class Family(models.Model): name = models.CharField(max_length=50) order = models.ForeignKey(Order, models.CASCADE) @@ -71,7 +64,6 @@ class Family(models.Model): return self.name -@python_2_unicode_compatible class Genus(models.Model): name = models.CharField(max_length=50) family = models.ForeignKey(Family, models.CASCADE) @@ -80,7 +72,6 @@ class Genus(models.Model): return self.name -@python_2_unicode_compatible class Species(models.Model): name = models.CharField(max_length=50) genus = models.ForeignKey(Genus, models.CASCADE) @@ -91,7 +82,6 @@ class Species(models.Model): # and we'll invent a new thing so we have a model with two foreign keys -@python_2_unicode_compatible class HybridSpecies(models.Model): name = models.CharField(max_length=50) parent_1 = models.ForeignKey(Species, models.CASCADE, related_name='child_1') @@ -101,7 +91,6 @@ class HybridSpecies(models.Model): return self.name -@python_2_unicode_compatible class Topping(models.Model): name = models.CharField(max_length=30) @@ -109,7 +98,6 @@ class Topping(models.Model): return self.name -@python_2_unicode_compatible class Pizza(models.Model): name = models.CharField(max_length=100) toppings = models.ManyToManyField(Topping) @@ -118,7 +106,6 @@ class Pizza(models.Model): return self.name -@python_2_unicode_compatible class TaggedItem(models.Model): tag = models.CharField(max_length=30) @@ -130,7 +117,6 @@ class TaggedItem(models.Model): return self.tag -@python_2_unicode_compatible class Bookmark(models.Model): url = models.URLField() tags = GenericRelation(TaggedItem) diff --git a/tests/select_related_onetoone/models.py b/tests/select_related_onetoone/models.py index 76c45659af..0a20cc7375 100644 --- a/tests/select_related_onetoone/models.py +++ b/tests/select_related_onetoone/models.py @@ -1,8 +1,6 @@ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class User(models.Model): username = models.CharField(max_length=100) email = models.EmailField() @@ -11,7 +9,6 @@ class User(models.Model): return self.username -@python_2_unicode_compatible class UserProfile(models.Model): user = models.OneToOneField(User, models.CASCADE) city = models.CharField(max_length=100) @@ -21,7 +18,6 @@ class UserProfile(models.Model): return "%s, %s" % (self.city, self.state) -@python_2_unicode_compatible class UserStatResult(models.Model): results = models.CharField(max_length=50) @@ -29,7 +25,6 @@ class UserStatResult(models.Model): return 'UserStatResults, results = %s' % (self.results,) -@python_2_unicode_compatible class UserStat(models.Model): user = models.OneToOneField(User, models.CASCADE, primary_key=True) posts = models.IntegerField() @@ -39,7 +34,6 @@ class UserStat(models.Model): return 'UserStat, posts = %s' % (self.posts,) -@python_2_unicode_compatible class StatDetails(models.Model): base_stats = models.OneToOneField(UserStat, models.CASCADE) comments = models.IntegerField() @@ -61,7 +55,6 @@ class Product(models.Model): image = models.OneToOneField(Image, models.SET_NULL, null=True) -@python_2_unicode_compatible class Parent1(models.Model): name1 = models.CharField(max_length=50) @@ -69,7 +62,6 @@ class Parent1(models.Model): return self.name1 -@python_2_unicode_compatible class Parent2(models.Model): # Avoid having two "id" fields in the Child1 subclass id2 = models.AutoField(primary_key=True) @@ -79,7 +71,6 @@ class Parent2(models.Model): return self.name2 -@python_2_unicode_compatible class Child1(Parent1, Parent2): value = models.IntegerField() @@ -87,7 +78,6 @@ class Child1(Parent1, Parent2): return self.name1 -@python_2_unicode_compatible class Child2(Parent1): parent2 = models.OneToOneField(Parent2, models.CASCADE) value = models.IntegerField() diff --git a/tests/select_related_regress/models.py b/tests/select_related_regress/models.py index 4ac8cc1518..ed4d98544b 100644 --- a/tests/select_related_regress/models.py +++ b/tests/select_related_regress/models.py @@ -1,8 +1,6 @@ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Building(models.Model): name = models.CharField(max_length=10) @@ -10,7 +8,6 @@ class Building(models.Model): return "Building: %s" % self.name -@python_2_unicode_compatible class Device(models.Model): building = models.ForeignKey('Building', models.CASCADE) name = models.CharField(max_length=10) @@ -19,7 +16,6 @@ class Device(models.Model): return "device '%s' in building %s" % (self.name, self.building) -@python_2_unicode_compatible class Port(models.Model): device = models.ForeignKey('Device', models.CASCADE) port_number = models.CharField(max_length=10) @@ -28,7 +24,6 @@ class Port(models.Model): return "%s/%s" % (self.device.name, self.port_number) -@python_2_unicode_compatible class Connection(models.Model): start = models.ForeignKey( Port, @@ -102,7 +97,6 @@ class SpecialClient(Client): # Some model inheritance exercises -@python_2_unicode_compatible class Parent(models.Model): name = models.CharField(max_length=10) @@ -114,7 +108,6 @@ class Child(Parent): value = models.IntegerField() -@python_2_unicode_compatible class Item(models.Model): name = models.CharField(max_length=10) child = models.ForeignKey(Child, models.SET_NULL, null=True) @@ -125,7 +118,6 @@ class Item(models.Model): # Models for testing bug #19870. -@python_2_unicode_compatible class Fowl(models.Model): name = models.CharField(max_length=10) diff --git a/tests/serializers/models/base.py b/tests/serializers/models/base.py index 5f9bdd833c..aa55b87c61 100644 --- a/tests/serializers/models/base.py +++ b/tests/serializers/models/base.py @@ -8,7 +8,6 @@ from decimal import Decimal from django.db import models from django.utils import six -from django.utils.encoding import python_2_unicode_compatible class CategoryMetaDataManager(models.Manager): @@ -17,7 +16,6 @@ class CategoryMetaDataManager(models.Manager): return self.get(kind=kind, name=name) -@python_2_unicode_compatible class CategoryMetaData(models.Model): kind = models.CharField(max_length=10) name = models.CharField(max_length=10) @@ -34,7 +32,6 @@ class CategoryMetaData(models.Model): return (self.kind, self.name) -@python_2_unicode_compatible class Category(models.Model): name = models.CharField(max_length=20) meta_data = models.ForeignKey(CategoryMetaData, models.SET_NULL, null=True, default=None) @@ -46,7 +43,6 @@ class Category(models.Model): return self.name -@python_2_unicode_compatible class Author(models.Model): name = models.CharField(max_length=20) @@ -57,7 +53,6 @@ class Author(models.Model): return self.name -@python_2_unicode_compatible class Article(models.Model): author = models.ForeignKey(Author, models.CASCADE) headline = models.CharField(max_length=50) @@ -72,7 +67,6 @@ class Article(models.Model): return self.headline -@python_2_unicode_compatible class AuthorProfile(models.Model): author = models.OneToOneField(Author, models.CASCADE, primary_key=True) date_of_birth = models.DateField() @@ -81,7 +75,6 @@ class AuthorProfile(models.Model): return "Profile of %s" % self.author -@python_2_unicode_compatible class Actor(models.Model): name = models.CharField(max_length=20, primary_key=True) @@ -92,7 +85,6 @@ class Actor(models.Model): return self.name -@python_2_unicode_compatible class Movie(models.Model): actor = models.ForeignKey(Actor, models.CASCADE) title = models.CharField(max_length=50) @@ -109,7 +101,6 @@ class Score(models.Model): score = models.FloatField() -@python_2_unicode_compatible class Team(object): def __init__(self, title): self.title = title @@ -146,7 +137,6 @@ class TeamField(models.CharField): return name, path, args, kwargs -@python_2_unicode_compatible class Player(models.Model): name = models.CharField(max_length=50) rank = models.IntegerField() diff --git a/tests/signals/models.py b/tests/signals/models.py index 4f8d72817c..960df390de 100644 --- a/tests/signals/models.py +++ b/tests/signals/models.py @@ -2,10 +2,8 @@ Testing signals before/after saving and deleting. """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Person(models.Model): first_name = models.CharField(max_length=20) last_name = models.CharField(max_length=20) @@ -14,7 +12,6 @@ class Person(models.Model): return "%s %s" % (self.first_name, self.last_name) -@python_2_unicode_compatible class Car(models.Model): make = models.CharField(max_length=20) model = models.CharField(max_length=20) @@ -23,7 +20,6 @@ class Car(models.Model): return "%s %s" % (self.make, self.model) -@python_2_unicode_compatible class Author(models.Model): name = models.CharField(max_length=20) @@ -31,7 +27,6 @@ class Author(models.Model): return self.name -@python_2_unicode_compatible class Book(models.Model): name = models.CharField(max_length=20) authors = models.ManyToManyField(Author) diff --git a/tests/sites_framework/models.py b/tests/sites_framework/models.py index ed0f4443a1..fb6a9d4e79 100644 --- a/tests/sites_framework/models.py +++ b/tests/sites_framework/models.py @@ -1,10 +1,8 @@ from django.contrib.sites.managers import CurrentSiteManager from django.contrib.sites.models import Site from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class AbstractArticle(models.Model): title = models.CharField(max_length=50) diff --git a/tests/str/models.py b/tests/str/models.py index 33e31857fa..12f0247570 100644 --- a/tests/str/models.py +++ b/tests/str/models.py @@ -14,7 +14,6 @@ if you prefer. You must be careful to encode the results correctly, though. """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible class Article(models.Model): @@ -27,7 +26,6 @@ class Article(models.Model): return self.headline -@python_2_unicode_compatible class InternationalArticle(models.Model): headline = models.CharField(max_length=100) pub_date = models.DateTimeField() diff --git a/tests/str/tests.py b/tests/str/tests.py index 516560415c..c4dd1d6b26 100644 --- a/tests/str/tests.py +++ b/tests/str/tests.py @@ -25,13 +25,7 @@ class SimpleTests(TestCase): headline='Girl wins €12.500 in lottery', pub_date=datetime.datetime(2005, 7, 28) ) - if six.PY3: - self.assertEqual(str(a), 'Girl wins €12.500 in lottery') - else: - # On Python 2, the default str() output will be the UTF-8 encoded - # output of __unicode__() -- or __str__() when the - # python_2_unicode_compatible decorator is used. - self.assertEqual(str(a), b'Girl wins \xe2\x82\xac12.500 in lottery') + self.assertEqual(str(a), 'Girl wins €12.500 in lottery') @isolate_apps('str') def test_defaults(self): diff --git a/tests/string_lookup/models.py b/tests/string_lookup/models.py index e8fd8a1b12..5351ee5fe9 100644 --- a/tests/string_lookup/models.py +++ b/tests/string_lookup/models.py @@ -1,8 +1,6 @@ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Foo(models.Model): name = models.CharField(max_length=50) friend = models.CharField(max_length=50, blank=True) @@ -11,7 +9,6 @@ class Foo(models.Model): return "Foo %s" % self.name -@python_2_unicode_compatible class Bar(models.Model): name = models.CharField(max_length=50) normal = models.ForeignKey(Foo, models.CASCADE, related_name='normal_foo') @@ -22,7 +19,6 @@ class Bar(models.Model): return "Bar %s" % self.place.name -@python_2_unicode_compatible class Whiz(models.Model): name = models.CharField(max_length=50) @@ -30,7 +26,6 @@ class Whiz(models.Model): return "Whiz %s" % self.name -@python_2_unicode_compatible class Child(models.Model): parent = models.OneToOneField('Base', models.CASCADE) name = models.CharField(max_length=50) @@ -39,7 +34,6 @@ class Child(models.Model): return "Child %s" % self.name -@python_2_unicode_compatible class Base(models.Model): name = models.CharField(max_length=50) @@ -47,7 +41,6 @@ class Base(models.Model): return "Base %s" % self.name -@python_2_unicode_compatible class Article(models.Model): name = models.CharField(max_length=50) text = models.TextField() diff --git a/tests/syndication_tests/models.py b/tests/syndication_tests/models.py index 22b0f81fbb..f6c499ccca 100644 --- a/tests/syndication_tests/models.py +++ b/tests/syndication_tests/models.py @@ -1,8 +1,6 @@ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Entry(models.Model): title = models.CharField(max_length=200) updated = models.DateTimeField() @@ -18,7 +16,6 @@ class Entry(models.Model): return "/blog/%s/" % self.pk -@python_2_unicode_compatible class Article(models.Model): title = models.CharField(max_length=200) entry = models.ForeignKey(Entry, models.CASCADE) diff --git a/tests/template_tests/filter_tests/test_unordered_list.py b/tests/template_tests/filter_tests/test_unordered_list.py index eab9442780..659b1acc2b 100644 --- a/tests/template_tests/filter_tests/test_unordered_list.py +++ b/tests/template_tests/filter_tests/test_unordered_list.py @@ -1,6 +1,5 @@ from django.template.defaultfilters import unordered_list from django.test import SimpleTestCase -from django.utils.encoding import python_2_unicode_compatible from django.utils.safestring import mark_safe from ..utils import setup @@ -88,7 +87,6 @@ class FunctionTests(SimpleTestCase): ) def test_ulitem(self): - @python_2_unicode_compatible class ULItem(object): def __init__(self, title): self.title = title @@ -115,7 +113,6 @@ class FunctionTests(SimpleTestCase): ) def test_ulitem_autoescape_off(self): - @python_2_unicode_compatible class ULItem(object): def __init__(self, title): self.title = title diff --git a/tests/template_tests/utils.py b/tests/template_tests/utils.py index cbc452c808..187d259f36 100644 --- a/tests/template_tests/utils.py +++ b/tests/template_tests/utils.py @@ -4,7 +4,6 @@ import os from django.template.engine import Engine from django.test.utils import override_settings from django.utils._os import upath -from django.utils.encoding import python_2_unicode_compatible from django.utils.safestring import mark_safe ROOT = os.path.dirname(os.path.abspath(upath(__file__))) @@ -165,7 +164,6 @@ class SilentAttrClass(object): b = property(b) -@python_2_unicode_compatible class UTF8Class: "Class whose __str__ returns non-ASCII data on Python 2" def __str__(self): @@ -173,13 +171,11 @@ class UTF8Class: # These two classes are used to test auto-escaping of unicode output. -@python_2_unicode_compatible class UnsafeClass: def __str__(self): return 'you & me' -@python_2_unicode_compatible class SafeClass: def __str__(self): return mark_safe('you > me') diff --git a/tests/test_utils/models.py b/tests/test_utils/models.py index 979b04855f..e94d44356b 100644 --- a/tests/test_utils/models.py +++ b/tests/test_utils/models.py @@ -1,8 +1,6 @@ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Car(models.Model): name = models.CharField(max_length=100) @@ -10,7 +8,6 @@ class Car(models.Model): return self.name -@python_2_unicode_compatible class Person(models.Model): name = models.CharField(max_length=100) cars = models.ManyToManyField(Car, through='PossessedCar') @@ -19,7 +16,6 @@ class Person(models.Model): return self.name -@python_2_unicode_compatible class PossessedCar(models.Model): car = models.ForeignKey(Car, models.CASCADE) belongs_to = models.ForeignKey(Person, models.CASCADE) diff --git a/tests/transaction_hooks/models.py b/tests/transaction_hooks/models.py index cd2f22b514..d3abbfef91 100644 --- a/tests/transaction_hooks/models.py +++ b/tests/transaction_hooks/models.py @@ -1,8 +1,6 @@ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Thing(models.Model): num = models.IntegerField() diff --git a/tests/transactions/models.py b/tests/transactions/models.py index 4154b39123..2f2bac463a 100644 --- a/tests/transactions/models.py +++ b/tests/transactions/models.py @@ -7,10 +7,8 @@ commit-on-success behavior. Alternatively, you can manage the transaction manually. """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Reporter(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) diff --git a/tests/unmanaged_models/models.py b/tests/unmanaged_models/models.py index e925752a06..13824b7732 100644 --- a/tests/unmanaged_models/models.py +++ b/tests/unmanaged_models/models.py @@ -4,13 +4,11 @@ is generated for the table on various manage.py operations. """ 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. -@python_2_unicode_compatible class A01(models.Model): f_a = models.CharField(max_length=10, db_index=True) f_b = models.IntegerField() @@ -22,7 +20,6 @@ class A01(models.Model): return self.f_a -@python_2_unicode_compatible class B01(models.Model): fk_a = models.ForeignKey(A01, models.CASCADE) f_a = models.CharField(max_length=10, db_index=True) @@ -37,7 +34,6 @@ class B01(models.Model): return self.f_a -@python_2_unicode_compatible class C01(models.Model): mm_a = models.ManyToManyField(A01, db_table='d01') f_a = models.CharField(max_length=10, db_index=True) @@ -54,7 +50,6 @@ class C01(models.Model): # since we have told Django they aren't managed by Django. -@python_2_unicode_compatible class A02(models.Model): f_a = models.CharField(max_length=10, db_index=True) @@ -66,7 +61,6 @@ class A02(models.Model): return self.f_a -@python_2_unicode_compatible class B02(models.Model): class Meta: db_table = 'b01' @@ -82,7 +76,6 @@ class B02(models.Model): # To re-use the many-to-many intermediate table, we need to manually set up # things up. -@python_2_unicode_compatible class C02(models.Model): mm_a = models.ManyToManyField(A02, through="Intermediate") f_a = models.CharField(max_length=10, db_index=True) diff --git a/tests/update/models.py b/tests/update/models.py index 648a773318..1fbab38ca9 100644 --- a/tests/update/models.py +++ b/tests/update/models.py @@ -5,10 +5,8 @@ updates. from django.db import models from django.utils import six -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class DataPoint(models.Model): name = models.CharField(max_length=20) value = models.CharField(max_length=20) @@ -18,7 +16,6 @@ class DataPoint(models.Model): return six.text_type(self.name) -@python_2_unicode_compatible class RelatedPoint(models.Model): name = models.CharField(max_length=20) data = models.ForeignKey(DataPoint, models.CASCADE) diff --git a/tests/update_only_fields/models.py b/tests/update_only_fields/models.py index a3be5088a2..3d6a9ec8e6 100644 --- a/tests/update_only_fields/models.py +++ b/tests/update_only_fields/models.py @@ -1,6 +1,5 @@ from django.db import models -from django.utils.encoding import python_2_unicode_compatible GENDER_CHOICES = ( ('M', 'Male'), @@ -12,7 +11,6 @@ class Account(models.Model): num = models.IntegerField() -@python_2_unicode_compatible class Person(models.Model): name = models.CharField(max_length=20) gender = models.CharField(max_length=1, choices=GENDER_CHOICES) @@ -28,7 +26,6 @@ class Employee(Person): accounts = models.ManyToManyField('Account', related_name='employees', blank=True) -@python_2_unicode_compatible class Profile(models.Model): name = models.CharField(max_length=200) salary = models.FloatField(default=1000.0) diff --git a/tests/validation/models.py b/tests/validation/models.py index 90b2dbb79a..043aa4ded7 100644 --- a/tests/validation/models.py +++ b/tests/validation/models.py @@ -2,7 +2,6 @@ from datetime import datetime from django.core.exceptions import ValidationError from django.db import models -from django.utils.encoding import python_2_unicode_compatible def validate_answer_to_universe(value): @@ -89,7 +88,6 @@ class Article(models.Model): self.pub_date = datetime.now() -@python_2_unicode_compatible class Post(models.Model): title = models.CharField(max_length=50, unique_for_date='posted', blank=True) slug = models.CharField(max_length=50, unique_for_year='posted', blank=True) diff --git a/tests/view_tests/models.py b/tests/view_tests/models.py index c891bcadee..04e31c43da 100644 --- a/tests/view_tests/models.py +++ b/tests/view_tests/models.py @@ -3,10 +3,8 @@ Regression tests for Django built-in views. """ from django.db import models -from django.utils.encoding import python_2_unicode_compatible -@python_2_unicode_compatible class Author(models.Model): name = models.CharField(max_length=100) @@ -17,7 +15,6 @@ class Author(models.Model): return '/authors/%s/' % self.id -@python_2_unicode_compatible class BaseArticle(models.Model): """ An abstract article Model so that we can create article models with and