Created
July 18, 2012 18:58
-
-
Save Nagyman/3138086 to your computer and use it in GitHub Desktop.
django-reversion createinitialrevisions performance improvement
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from optparse import make_option | |
+from django.db import reset_queries | |
from django.core.exceptions import ImproperlyConfigured | |
from django.core.management.base import BaseCommand | |
from django.core.management.base import CommandError | |
@@ -93,17 +94,28 @@ class Command(BaseCommand): | |
live_objs = live_objs.exclude( | |
pk__in = list(versioned_pk_queryset.values_list("object_id", flat=True).iterator()) | |
) | |
+ | |
# Save all the versions. | |
- for obj in live_objs: | |
- try: | |
- default_revision_manager.save_revision((obj,), comment=comment) | |
- except: | |
- print "ERROR: Could not save initial version for %s %s." % (model_class.__name__, obj.pk) | |
- raise | |
- created_count += 1 | |
+ ids = list(live_objs.values_list(model_class._meta.pk.name, flat=True)) | |
+ total = len(ids) | |
+ batchsize = 500 | |
+ from django.core.paginator import Paginator | |
+ paginator = Paginator(ids, batchsize) | |
+ for page_num in paginator.page_range: | |
+ page = paginator.page(page_num) | |
+ objects = live_objs.in_bulk(page.object_list) | |
+ print '%s of %s' % (page.start_index(), total) | |
+ for id, obj in objects.iteritems(): | |
+ try: | |
+ default_revision_manager.save_revision((obj,), comment=comment) | |
+ except: | |
+ print "ERROR: Could not save initial version for %s %s." % (model_class.__name__, obj.pk) | |
+ raise | |
+ created_count += 1 | |
+ | |
# Print out a message, if feeling verbose. | |
if verbosity >= 2: | |
print u"Created %s initial revision(s) for model %s." % (created_count, smart_unicode(model_class._meta.verbose_name)) | |
else: | |
if verbosity >= 2: | |
- print u"Model %s is not registered." % (smart_unicode(model_class._meta.verbose_name)) | |
\ No newline at end of file | |
+ print u"Model %s is not registered." % (smart_unicode(model_class._meta.verbose_name)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment