Skip to content

Commit

Permalink
[1.1.X] Fixed #12286: Ensure proxied model's table is created.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
kmtracey committed Mar 21, 2010
1 parent df010f0 commit 3a55a2f
Show file tree
Hide file tree
Showing 8 changed files with 47 additions and 1 deletion.
3 changes: 2 additions & 1 deletion django/core/management/commands/syncdb.py
Expand Up @@ -76,7 +76,8 @@ def handle_noargs(self, **options):
print "Creating table %s" % model._meta.db_table
for statement in sql:
cursor.execute(statement)
tables.append(connection.introspection.table_name_converter(model._meta.db_table))
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
# to ensure that all referred tables will exist.
Expand Down
Empty file.
Empty file.
5 changes: 5 additions & 0 deletions tests/modeltests/proxy_model_inheritance/app1/models.py
@@ -0,0 +1,5 @@
from app2.models import NiceModel

class ProxyModel(NiceModel):
class Meta:
proxy = True
Empty file.
4 changes: 4 additions & 0 deletions tests/modeltests/proxy_model_inheritance/app2/models.py
@@ -0,0 +1,4 @@
from django.db import models

class NiceModel(models.Model):
pass
Empty file.
36 changes: 36 additions & 0 deletions tests/modeltests/proxy_model_inheritance/tests.py
@@ -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)

0 comments on commit 3a55a2f

Please sign in to comment.