Skip to content

Commit cefcd2a

Browse files
committed
Re-introduce bulk_create on supported databases
This fixes #924.
1 parent 6796b93 commit cefcd2a

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

reversion/revisions.py

+11-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from django.apps import apps
66
from django.core import serializers
77
from django.core.exceptions import ObjectDoesNotExist
8-
from django.db import models, transaction, router
8+
from django.db import models, transaction, router, connections
99
from django.db.models.query import QuerySet
1010
from django.db.models.signals import post_save, m2m_changed
1111
from django.utils.encoding import force_str
@@ -211,6 +211,7 @@ def add_to_revision(obj, model_db=None):
211211

212212
def _save_revision(versions, user=None, comment="", meta=(), date_created=None, using=None):
213213
from reversion.models import Revision
214+
from reversion.models import Version
214215
# Only save versions that exist in the database.
215216
# Use _base_manager so we don't have problems when _default_manager is overriden
216217
model_db_pks = defaultdict(lambda: defaultdict(set))
@@ -248,9 +249,17 @@ def _save_revision(versions, user=None, comment="", meta=(), date_created=None,
248249
# Save the revision.
249250
revision.save(using=using)
250251
# Save version models.
252+
253+
can_use_bulk_create = connections[using].features.can_return_rows_from_bulk_insert
254+
251255
for version in versions:
252256
version.revision = revision
253-
version.save(using=using)
257+
if not can_use_bulk_create:
258+
version.save(using=using)
259+
260+
if can_use_bulk_create:
261+
Version.objects.using(using).bulk_create(versions)
262+
254263
# Save the meta information.
255264
for meta_model, meta_fields in meta:
256265
meta_model._base_manager.db_manager(using=using).create(

0 commit comments

Comments
 (0)