Ticket #9549: 9549-0.diff

File 9549-0.diff, 2.5 KB (added by uptimebox, 7 years ago)
  • django/core/management/commands/loaddata.py

    diff --git a/django/core/management/commands/loaddata.py b/django/core/management/commands/loaddata.py
    index a6a7871..9ba3748 100644
    a b class Command(BaseCommand): 
    1414        make_option('--verbosity', action='store', dest='verbosity', default='1',
    1515            type='choice', choices=['0', '1', '2'],
    1616            help='Verbosity level; 0=minimal output, 1=normal output, 2=all output'),
     17        make_option('--noclobber', action='store_true', dest='noclobber',
     18            default=False, help='Preserve existing data'),
    1719    )
    1820    help = 'Installs the named fixture(s) in the database.'
    1921    args = "fixture [fixture ...]"
    class Command(BaseCommand): 
    2628
    2729        self.style = no_style()
    2830
     31        noclobber = bool(options.get('noclobber', False))
    2932        verbosity = int(options.get('verbosity', 1))
    3033        show_traceback = options.get('traceback', False)
    3134
    class Command(BaseCommand): 
    108111                        else:
    109112                            fixture_count += 1
    110113                            objects_in_fixture = 0
     114                            objects_saved = 0
    111115                            if verbosity > 0:
    112116                                print "Installing %s fixture '%s' from %s." % \
    113117                                    (format, fixture_name, humanize(fixture_dir))
    class Command(BaseCommand): 
    116120                                for obj in objects:
    117121                                    objects_in_fixture += 1
    118122                                    models.add(obj.object.__class__)
    119                                     obj.save()
    120                                 object_count += objects_in_fixture
     123                                    if noclobber:
     124                                        try:
     125                                            obj.object.__class__.objects.get(pk=obj.object.pk)
     126                                        except obj.object.__class__.DoesNotExist:
     127                                            obj.save()
     128                                            objects_saved += 1
     129                                    else:
     130                                        obj.save()
     131                                        objects_saved += 1
     132                                object_count += objects_saved
    121133                                label_found = True
    122134                            except (SystemExit, KeyboardInterrupt):
    123135                                raise
Back to Top