Ticket #5610: dumpdata-additions-docs-5610.diff

File dumpdata-additions-docs-5610.diff, 6.3 KB (added by David Reynolds, 16 years ago)

Docs for new features of dumpdata

  • 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):  
    1313    args = '[appname ...]'
    1414
    1515    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
    1717        from django.core import serializers
    1818
    1919        format = options.get('format', 'json')
    2020        indent = options.get('indent', None)
    21 
     21       
    2222        if len(app_labels) == 0:
    2323            app_list = get_apps()
    2424        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]]
    2637
    2738        # Check that the serialization format exists; this is a shortcut to
    2839        # avoid collating all the objects and _then_ failing.
     40       
    2941        try:
    3042            serializers.get_serializer(format)
    3143        except KeyError:
    3244            raise CommandError("Unknown serialization format: %s" % format)
    3345
    3446        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
    3857        try:
    3958            return serializers.serialize(format, objects, indent=indent)
    4059        except Exception, e:
  • docs/django-admin.txt

    diff --git a/docs/django-admin.txt b/docs/django-admin.txt
    index 2977f99..a3a4719 100644
    a b example, the default settings don't define ``ROOT_URLCONF``, so  
    122122Note that Django's default settings live in ``django/conf/global_settings.py``,
    123123if you're ever curious to see the full list of defaults.
    124124
    125 dumpdata <appname appname ...>
     125dumpdata <appname appname appname.Model ...>
    126126------------------------------
    127127
    128128Outputs to standard output all data in the database associated with the named
    application(s).  
    130130
    131131If no application name is provided, all installed applications will be dumped.
    132132
     133Alternatively, you can provide a list of models in the form of ``appname.Model``
     134if  you want to limit what models you dump. You can also provide a mixture of
     135both.
     136
    133137The output of ``dumpdata`` can be used as input for ``loaddata``.
    134138
    135139--format
  • 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):  
    2020
    2121    class Meta:
    2222        ordering = ('-pub_date', 'headline')
     23       
     24class 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',)
    2333
    2434__test__ = {'API_TESTS': """
    2535>>> from django.core import management
    Multiple fixtures named 'fixture2' in '...fixtures'. Aborting.  
    8292# Dump the current contents of the database as a JSON fixture
    8393>>> management.call_command('dumpdata', 'fixtures', format='json')
    8494[{"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"}}]
    85115"""
    86116
    87117from django.test import TestCase
Back to Top