mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	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:
		| @@ -73,7 +73,8 @@ class Command(BaseCommand): | ||||
|                 model_list = get_models(app) | ||||
|  | ||||
|             for model in model_list: | ||||
|                 objects.extend(model._default_manager.all()) | ||||
|                 if not model._meta.proxy: | ||||
|                     objects.extend(model._default_manager.all()) | ||||
|  | ||||
|         try: | ||||
|             return serializers.serialize(format, objects, indent=indent) | ||||
|   | ||||
| @@ -40,7 +40,7 @@ class BaseDatabaseCreation(object): | ||||
|         from django.db import models | ||||
|  | ||||
|         opts = model._meta | ||||
|         if not opts.managed: | ||||
|         if not opts.managed or opts.proxy: | ||||
|             return [], {} | ||||
|         final_output = [] | ||||
|         table_output = [] | ||||
| @@ -121,7 +121,7 @@ class BaseDatabaseCreation(object): | ||||
|         "Returns any ALTER TABLE statements to add constraints after the fact." | ||||
|         from django.db.backends.util import truncate_name | ||||
|  | ||||
|         if not model._meta.managed: | ||||
|         if not model._meta.managed or model._meta.proxy: | ||||
|             return [] | ||||
|         qn = self.connection.ops.quote_name | ||||
|         final_output = [] | ||||
| @@ -236,7 +236,7 @@ class BaseDatabaseCreation(object): | ||||
|  | ||||
|     def sql_indexes_for_model(self, model, style): | ||||
|         "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 [] | ||||
|         output = [] | ||||
|         for f in model._meta.local_fields: | ||||
| @@ -268,7 +268,7 @@ class BaseDatabaseCreation(object): | ||||
|  | ||||
|     def sql_destroy_model(self, model, references_to_delete, style): | ||||
|         "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 [] | ||||
|         # Drop the table now | ||||
|         qn = self.connection.ops.quote_name | ||||
| @@ -286,7 +286,7 @@ class BaseDatabaseCreation(object): | ||||
|     def sql_remove_table_constraints(self, model, references_to_delete, style): | ||||
|         from django.db.backends.util import truncate_name | ||||
|  | ||||
|         if not model._meta.managed: | ||||
|         if not model._meta.managed or model._meta.proxy: | ||||
|             return [] | ||||
|         output = [] | ||||
|         qn = self.connection.ops.quote_name | ||||
|   | ||||
| @@ -54,7 +54,7 @@ class Parent(models.Model): | ||||
| class Child(Parent): | ||||
|     data = models.CharField(max_length=10) | ||||
|  | ||||
| # Models to regresison check #7572 | ||||
| # Models to regression test #7572 | ||||
| class Channel(models.Model): | ||||
|     name = models.CharField(max_length=255) | ||||
|  | ||||
| @@ -65,6 +65,14 @@ class Article(models.Model): | ||||
|     class Meta: | ||||
|         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':""" | ||||
| >>> from django.core import management | ||||
|  | ||||
| @@ -170,4 +178,18 @@ Weight = 1.2 (<type 'float'>) | ||||
| >>> 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"}}] | ||||
|  | ||||
| ############################################### | ||||
| # 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"}}] | ||||
|  | ||||
| """} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user