Fixed #11428 -- Ensured that SQL generating commands and dumpdata don't include proxy models in their output. Thanks to Anssi Kaariainen for the report.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@11343 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
e00150af15
commit
3412860f89
|
@ -73,6 +73,7 @@ class Command(BaseCommand):
|
||||||
model_list = get_models(app)
|
model_list = get_models(app)
|
||||||
|
|
||||||
for model in model_list:
|
for model in model_list:
|
||||||
|
if not model._meta.proxy:
|
||||||
objects.extend(model._default_manager.all())
|
objects.extend(model._default_manager.all())
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -40,7 +40,7 @@ class BaseDatabaseCreation(object):
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
opts = model._meta
|
opts = model._meta
|
||||||
if not opts.managed:
|
if not opts.managed or opts.proxy:
|
||||||
return [], {}
|
return [], {}
|
||||||
final_output = []
|
final_output = []
|
||||||
table_output = []
|
table_output = []
|
||||||
|
@ -121,7 +121,7 @@ class BaseDatabaseCreation(object):
|
||||||
"Returns any ALTER TABLE statements to add constraints after the fact."
|
"Returns any ALTER TABLE statements to add constraints after the fact."
|
||||||
from django.db.backends.util import truncate_name
|
from django.db.backends.util import truncate_name
|
||||||
|
|
||||||
if not model._meta.managed:
|
if not model._meta.managed or model._meta.proxy:
|
||||||
return []
|
return []
|
||||||
qn = self.connection.ops.quote_name
|
qn = self.connection.ops.quote_name
|
||||||
final_output = []
|
final_output = []
|
||||||
|
@ -236,7 +236,7 @@ class BaseDatabaseCreation(object):
|
||||||
|
|
||||||
def sql_indexes_for_model(self, model, style):
|
def sql_indexes_for_model(self, model, style):
|
||||||
"Returns the CREATE INDEX SQL statements for a single model"
|
"Returns the CREATE INDEX SQL statements for a single model"
|
||||||
if not model._meta.managed:
|
if not model._meta.managed or model._meta.proxy:
|
||||||
return []
|
return []
|
||||||
output = []
|
output = []
|
||||||
for f in model._meta.local_fields:
|
for f in model._meta.local_fields:
|
||||||
|
@ -268,7 +268,7 @@ class BaseDatabaseCreation(object):
|
||||||
|
|
||||||
def sql_destroy_model(self, model, references_to_delete, style):
|
def sql_destroy_model(self, model, references_to_delete, style):
|
||||||
"Return the DROP TABLE and restraint dropping statements for a single model"
|
"Return the DROP TABLE and restraint dropping statements for a single model"
|
||||||
if not model._meta.managed:
|
if not model._meta.managed or model._meta.proxy:
|
||||||
return []
|
return []
|
||||||
# Drop the table now
|
# Drop the table now
|
||||||
qn = self.connection.ops.quote_name
|
qn = self.connection.ops.quote_name
|
||||||
|
@ -286,7 +286,7 @@ class BaseDatabaseCreation(object):
|
||||||
def sql_remove_table_constraints(self, model, references_to_delete, style):
|
def sql_remove_table_constraints(self, model, references_to_delete, style):
|
||||||
from django.db.backends.util import truncate_name
|
from django.db.backends.util import truncate_name
|
||||||
|
|
||||||
if not model._meta.managed:
|
if not model._meta.managed or model._meta.proxy:
|
||||||
return []
|
return []
|
||||||
output = []
|
output = []
|
||||||
qn = self.connection.ops.quote_name
|
qn = self.connection.ops.quote_name
|
||||||
|
|
|
@ -54,7 +54,7 @@ class Parent(models.Model):
|
||||||
class Child(Parent):
|
class Child(Parent):
|
||||||
data = models.CharField(max_length=10)
|
data = models.CharField(max_length=10)
|
||||||
|
|
||||||
# Models to regresison check #7572
|
# Models to regression test #7572
|
||||||
class Channel(models.Model):
|
class Channel(models.Model):
|
||||||
name = models.CharField(max_length=255)
|
name = models.CharField(max_length=255)
|
||||||
|
|
||||||
|
@ -65,6 +65,14 @@ class Article(models.Model):
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ('id',)
|
ordering = ('id',)
|
||||||
|
|
||||||
|
# Models to regression test #11428
|
||||||
|
class Widget(models.Model):
|
||||||
|
name = models.CharField(max_length=255)
|
||||||
|
|
||||||
|
class WidgetProxy(Widget):
|
||||||
|
class Meta:
|
||||||
|
proxy = True
|
||||||
|
|
||||||
__test__ = {'API_TESTS':"""
|
__test__ = {'API_TESTS':"""
|
||||||
>>> from django.core import management
|
>>> from django.core import management
|
||||||
|
|
||||||
|
@ -170,4 +178,18 @@ Weight = 1.2 (<type 'float'>)
|
||||||
>>> management.call_command('dumpdata', 'fixtures_regress.animal', format='json')
|
>>> management.call_command('dumpdata', 'fixtures_regress.animal', format='json')
|
||||||
[{"pk": 1, "model": "fixtures_regress.animal", "fields": {"count": 3, "weight": 1.2, "name": "Lion", "latin_name": "Panthera leo"}}, {"pk": 2, "model": "fixtures_regress.animal", "fields": {"count": 2, "weight": 2.29..., "name": "Platypus", "latin_name": "Ornithorhynchus anatinus"}}, {"pk": 10, "model": "fixtures_regress.animal", "fields": {"count": 42, "weight": 1.2, "name": "Emu", "latin_name": "Dromaius novaehollandiae"}}]
|
[{"pk": 1, "model": "fixtures_regress.animal", "fields": {"count": 3, "weight": 1.2, "name": "Lion", "latin_name": "Panthera leo"}}, {"pk": 2, "model": "fixtures_regress.animal", "fields": {"count": 2, "weight": 2.29..., "name": "Platypus", "latin_name": "Ornithorhynchus anatinus"}}, {"pk": 10, "model": "fixtures_regress.animal", "fields": {"count": 42, "weight": 1.2, "name": "Emu", "latin_name": "Dromaius novaehollandiae"}}]
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
# Regression for #11428 - Proxy models aren't included
|
||||||
|
# when you run dumpdata over an entire app
|
||||||
|
|
||||||
|
# Flush out the database first
|
||||||
|
>>> management.call_command('reset', 'fixtures_regress', interactive=False, verbosity=0)
|
||||||
|
|
||||||
|
# Create an instance of the concrete class
|
||||||
|
>>> Widget(name='grommet').save()
|
||||||
|
|
||||||
|
# Dump data for the entire app. The proxy class shouldn't be included
|
||||||
|
>>> management.call_command('dumpdata', 'fixtures_regress', format='json')
|
||||||
|
[{"pk": 1, "model": "fixtures_regress.widget", "fields": {"name": "grommet"}}]
|
||||||
|
|
||||||
"""}
|
"""}
|
||||||
|
|
Loading…
Reference in New Issue