Ticket #5610: dumpdata-additions-5610.2.diff
File dumpdata-additions-5610.2.diff, 5.4 KB (added by , 17 years ago) |
---|
-
django/core/management/commands/dumpdata.py
diff --git a/django/core/management/commands/dumpdata.py b/django/core/management/commands/dumpdata.py index 7bdcc42..e55ae7b 100644
a b class Command(BaseCommand): 13 13 args = '[appname ...]' 14 14 15 15 def handle(self, *app_labels, **options): 16 from django.db.models import get_app, get_apps, get_models 16 from django.db.models import get_app, get_apps, get_models, get_model 17 17 from django.core import serializers 18 18 19 19 format = options.get('format', 'json') 20 20 indent = options.get('indent', None) 21 21 22 22 if len(app_labels) == 0: 23 23 app_list = get_apps() 24 24 else: 25 app_list = [get_app(app_label) for app_label in app_labels] 25 app_list = {} 26 for app_label in app_labels: 27 app_model_label = app_label.split('.') 28 if len(app_model_label) <= 1: 29 # This is just an app 30 app_list[app_model_label[0]] = None 31 else: 32 # This is app.Model 33 if app_model_label[0] in app_list.keys() and app_list[app_model_label[0]]: 34 app_list[app_model_label[0]].append(app_model_label[1]) 35 else: 36 app_list[app_model_label[0]] = [app_model_label[1]] 26 37 27 38 # Check that the serialization format exists; this is a shortcut to 28 39 # avoid collating all the objects and _then_ failing. 40 29 41 try: 30 42 serializers.get_serializer(format) 31 43 except KeyError: 32 44 raise CommandError("Unknown serialization format: %s" % format) 33 45 34 46 objects = [] 35 for app in app_list: 36 for model in get_models(app): 37 objects.extend(model.objects.all()) 47 for app_label in app_list: 48 if app_list[app_label]: 49 for model_label in app_list[app_label]: 50 model = get_model(app_label, model_label) 51 objects.extend(model.objects.all()) 52 else: 53 app = get_app(app_label) 54 for model in get_models(app): 55 objects.extend(model.objects.all()) 56 38 57 try: 39 58 return serializers.serialize(format, objects, indent=indent) 40 59 except Exception, e: -
tests/modeltests/fixtures/models.py
diff --git a/tests/modeltests/fixtures/models.py b/tests/modeltests/fixtures/models.py index 5b53115..51dad44 100644
a b class Article(models.Model): 20 20 21 21 class Meta: 22 22 ordering = ('-pub_date', 'headline') 23 24 class Category(models.Model): 25 title = models.CharField(max_length=100) 26 description = models.TextField() 27 28 def __unicode__(self): 29 return self.title 30 31 class Meta: 32 ordering = ('title',) 23 33 24 34 __test__ = {'API_TESTS': """ 25 35 >>> from django.core import management … … Multiple fixtures named 'fixture2' in '...fixtures'. Aborting. 82 92 # Dump the current contents of the database as a JSON fixture 83 93 >>> management.call_command('dumpdata', 'fixtures', format='json') 84 94 [{"pk": 3, "model": "fixtures.article", "fields": {"headline": "Time to reform copyright", "pub_date": "2006-06-16 13:00:00"}}, {"pk": 2, "model": "fixtures.article", "fields": {"headline": "Poker has no place on ESPN", "pub_date": "2006-06-16 12:00:00"}}, {"pk": 1, "model": "fixtures.article", "fields": {"headline": "Python program becomes self aware", "pub_date": "2006-06-16 11:00:00"}}] 95 96 # Reset Database representation again. 97 >>> management.call_command('flush', verbosity=0, interactive=False) 98 >>> management.call_command('loaddata', 'fixture4', verbosity=0) 99 >>> Article.objects.all() 100 [<Article: Time to reform copyright>, <Article: Poker has no place on ESPN>, <Article: Python program becomes self aware>] 101 >>> Category.objects.all() 102 [<Category: News Stories>] 103 104 # Dump the contents of the database as a JSON fixture 105 >>> management.call_command('dumpdata', 'fixtures', format='json') 106 [{"pk": 1, "model": "fixtures.category", "fields": {"description": "Latest news stories", "title": "News Stories"}}, {"pk": 3, "model": "fixtures.article", "fields": {"headline": "Time to reform copyright", "pub_date": "2006-06-16 13:00:00"}}, {"pk": 2, "model": "fixtures.article", "fields": {"headline": "Poker has no place on ESPN", "pub_date": "2006-06-16 12:00:00"}}, {"pk": 1, "model": "fixtures.article", "fields": {"headline": "Python program becomes self aware", "pub_date": "2006-06-16 11:00:00"}}] 107 108 # Try just dumping the contents of fixtures.Category 109 >>> management.call_command('dumpdata', 'fixtures.Category', format='json') 110 [{"pk": 1, "model": "fixtures.category", "fields": {"description": "Latest news stories", "title": "News Stories"}}] 111 112 # ..and just fixtures.Article 113 >>> management.call_command('dumpdata', 'fixtures.Article', format='json') 114 [{"pk": 3, "model": "fixtures.article", "fields": {"headline": "Time to reform copyright", "pub_date": "2006-06-16 13:00:00"}}, {"pk": 2, "model": "fixtures.article", "fields": {"headline": "Poker has no place on ESPN", "pub_date": "2006-06-16 12:00:00"}}, {"pk": 1, "model": "fixtures.article", "fields": {"headline": "Python program becomes self aware", "pub_date": "2006-06-16 11:00:00"}}] 85 115 """ 86 116 87 117 from django.test import TestCase