Added database migration for contrib.contenttypes.
Moved contenttypes tests to allow them to run correctly in the presence of migrations. refs #22170.
This commit is contained in:
parent
6e3ac5f474
commit
eb8600a656
|
@ -0,0 +1,33 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import models, migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='ContentType',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||||
|
('name', models.CharField(max_length=100)),
|
||||||
|
('app_label', models.CharField(max_length=100)),
|
||||||
|
('model', models.CharField(max_length=100, verbose_name='python model class name')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'ordering': ('name',),
|
||||||
|
'db_table': 'django_content_type',
|
||||||
|
'verbose_name': 'content type',
|
||||||
|
'verbose_name_plural': 'content types',
|
||||||
|
},
|
||||||
|
bases=(models.Model,),
|
||||||
|
),
|
||||||
|
migrations.AlterUniqueTogether(
|
||||||
|
name='contenttype',
|
||||||
|
unique_together=set([('app_label', 'model')]),
|
||||||
|
),
|
||||||
|
]
|
|
@ -1,3 +1,5 @@
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
from django.db import models
|
||||||
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
|
from django.utils.http import urlquote
|
||||||
|
|
||||||
|
|
||||||
|
class ConcreteModel(models.Model):
|
||||||
|
name = models.CharField(max_length=10)
|
||||||
|
|
||||||
|
|
||||||
|
class ProxyModel(ConcreteModel):
|
||||||
|
class Meta:
|
||||||
|
proxy = True
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
|
class FooWithoutUrl(models.Model):
|
||||||
|
"""
|
||||||
|
Fake model not defining ``get_absolute_url`` for
|
||||||
|
ContentTypesTests.test_shortcut_view_without_get_absolute_url()
|
||||||
|
"""
|
||||||
|
name = models.CharField(max_length=30, unique=True)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
|
class FooWithUrl(FooWithoutUrl):
|
||||||
|
"""
|
||||||
|
Fake model defining ``get_absolute_url`` for
|
||||||
|
ContentTypesTests.test_shortcut_view().
|
||||||
|
"""
|
||||||
|
|
||||||
|
def get_absolute_url(self):
|
||||||
|
return "/users/%s/" % urlquote(self.name)
|
||||||
|
|
||||||
|
|
||||||
|
class FooWithBrokenAbsoluteUrl(FooWithoutUrl):
|
||||||
|
"""
|
||||||
|
Fake model defining a ``get_absolute_url`` method containing an error
|
||||||
|
"""
|
||||||
|
|
||||||
|
def get_absolute_url(self):
|
||||||
|
return "/users/%s/" % self.unknown_field
|
|
@ -3,51 +3,11 @@ from __future__ import unicode_literals
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.contrib.contenttypes.views import shortcut
|
from django.contrib.contenttypes.views import shortcut
|
||||||
from django.contrib.sites.shortcuts import get_current_site
|
from django.contrib.sites.shortcuts import get_current_site
|
||||||
from django.db import models
|
|
||||||
from django.http import HttpRequest, Http404
|
from django.http import HttpRequest, Http404
|
||||||
from django.test import TestCase, override_settings
|
from django.test import TestCase, override_settings
|
||||||
from django.utils.http import urlquote
|
|
||||||
from django.utils import six
|
from django.utils import six
|
||||||
from django.utils.encoding import python_2_unicode_compatible
|
|
||||||
|
|
||||||
|
from .models import ConcreteModel, ProxyModel, FooWithoutUrl, FooWithUrl, FooWithBrokenAbsoluteUrl
|
||||||
class ConcreteModel(models.Model):
|
|
||||||
name = models.CharField(max_length=10)
|
|
||||||
|
|
||||||
|
|
||||||
class ProxyModel(ConcreteModel):
|
|
||||||
class Meta:
|
|
||||||
proxy = True
|
|
||||||
|
|
||||||
|
|
||||||
@python_2_unicode_compatible
|
|
||||||
class FooWithoutUrl(models.Model):
|
|
||||||
"""
|
|
||||||
Fake model not defining ``get_absolute_url`` for
|
|
||||||
:meth:`ContentTypesTests.test_shortcut_view_without_get_absolute_url`"""
|
|
||||||
name = models.CharField(max_length=30, unique=True)
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return self.name
|
|
||||||
|
|
||||||
|
|
||||||
class FooWithUrl(FooWithoutUrl):
|
|
||||||
"""
|
|
||||||
Fake model defining ``get_absolute_url`` for
|
|
||||||
:meth:`ContentTypesTests.test_shortcut_view`
|
|
||||||
"""
|
|
||||||
|
|
||||||
def get_absolute_url(self):
|
|
||||||
return "/users/%s/" % urlquote(self.name)
|
|
||||||
|
|
||||||
|
|
||||||
class FooWithBrokenAbsoluteUrl(FooWithoutUrl):
|
|
||||||
"""
|
|
||||||
Fake model defining a ``get_absolute_url`` method containing an error
|
|
||||||
"""
|
|
||||||
|
|
||||||
def get_absolute_url(self):
|
|
||||||
return "/users/%s/" % self.unknown_field
|
|
||||||
|
|
||||||
|
|
||||||
class ContentTypesTests(TestCase):
|
class ContentTypesTests(TestCase):
|
|
@ -77,7 +77,7 @@ class LoaderTests(TestCase):
|
||||||
)
|
)
|
||||||
|
|
||||||
# Ensure we've included unmigrated apps in there too
|
# Ensure we've included unmigrated apps in there too
|
||||||
self.assertIn("contenttypes", project_state.real_apps)
|
self.assertIn("auth", project_state.real_apps)
|
||||||
|
|
||||||
@override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations_unmigdep"})
|
@override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations_unmigdep"})
|
||||||
def test_load_unmigrated_dependency(self):
|
def test_load_unmigrated_dependency(self):
|
||||||
|
|
|
@ -128,6 +128,11 @@ def setup(verbosity, test_labels):
|
||||||
settings.MIDDLEWARE_CLASSES = ALWAYS_MIDDLEWARE_CLASSES
|
settings.MIDDLEWARE_CLASSES = ALWAYS_MIDDLEWARE_CLASSES
|
||||||
# Ensure the middleware classes are seen as overridden otherwise we get a compatibility warning.
|
# Ensure the middleware classes are seen as overridden otherwise we get a compatibility warning.
|
||||||
settings._explicit_settings.add('MIDDLEWARE_CLASSES')
|
settings._explicit_settings.add('MIDDLEWARE_CLASSES')
|
||||||
|
settings.MIGRATION_MODULES = {
|
||||||
|
# this module doesn't actually exist, but this lets us skip creating
|
||||||
|
# migrations for the test modules for some reason.
|
||||||
|
'contenttypes': 'django.contrib.contenttypes.tests.migrations',
|
||||||
|
}
|
||||||
|
|
||||||
if verbosity > 0:
|
if verbosity > 0:
|
||||||
# Ensure any warnings captured to logging are piped through a verbose
|
# Ensure any warnings captured to logging are piped through a verbose
|
||||||
|
|
Loading…
Reference in New Issue