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

[1.1.X] Fixed #12286: Ensure proxied model's table is created.

Thanks to telenieko for the report and flyingfred0 for test and fix.

Test is r12828 from trunk.


git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@12829 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Karen Tracey 2010-03-21 20:35:05 +00:00
parent df010f0a1f
commit 3a55a2f42c
8 changed files with 47 additions and 1 deletions

View File

@ -76,6 +76,7 @@ class Command(NoArgsCommand):
print "Creating table %s" % model._meta.db_table
for statement in sql:
cursor.execute(statement)
if sql:
tables.append(connection.introspection.table_name_converter(model._meta.db_table))
# Create the m2m tables. This must be done after all tables have been created

View File

@ -0,0 +1,5 @@
from app2.models import NiceModel
class ProxyModel(NiceModel):
class Meta:
proxy = True

View File

@ -0,0 +1,4 @@
from django.db import models
class NiceModel(models.Model):
pass

View File

@ -0,0 +1,36 @@
"""
XX. Proxy model inheritance
Proxy model inheritance across apps can result in syncdb not creating the table
for the proxied model (as described in #12286). This test creates two dummy
apps and calls syncdb, then verifies that the table has been created.
"""
import os
import sys
from django.conf import settings, Settings
from django.core.management import call_command
from django.db.models.loading import load_app
from django.test import TestCase
class ProxyModelInheritanceTests(TestCase):
def setUp(self):
self.old_sys_path = sys.path
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
self.old_installed_apps = settings.INSTALLED_APPS
settings.INSTALLED_APPS = ('app1', 'app2')
map(load_app, settings.INSTALLED_APPS)
call_command('syncdb', verbosity=0)
from app1.models import ProxyModel
from app2.models import NiceModel
global ProxyModel, NiceModel
def tearDown(self):
settings.INSTALLED_APPS = self.old_installed_apps
sys.path = self.old_sys_path
def test_table_exists(self):
self.assertEquals(NiceModel.objects.all().count(), 0)
self.assertEquals(ProxyModel.objects.all().count(), 0)