|
5 | 5 | from django.apps import apps
|
6 | 6 | from django.core import serializers
|
7 | 7 | from django.core.exceptions import ObjectDoesNotExist
|
8 |
| -from django.db import models, transaction, router |
| 8 | +from django.db import models, transaction, router, connections |
9 | 9 | from django.db.models.query import QuerySet
|
10 | 10 | from django.db.models.signals import post_save, m2m_changed
|
11 | 11 | from django.utils.encoding import force_str
|
@@ -211,6 +211,7 @@ def add_to_revision(obj, model_db=None):
|
211 | 211 |
|
212 | 212 | def _save_revision(versions, user=None, comment="", meta=(), date_created=None, using=None):
|
213 | 213 | from reversion.models import Revision
|
| 214 | + from reversion.models import Version |
214 | 215 | # Only save versions that exist in the database.
|
215 | 216 | # Use _base_manager so we don't have problems when _default_manager is overriden
|
216 | 217 | model_db_pks = defaultdict(lambda: defaultdict(set))
|
@@ -248,9 +249,17 @@ def _save_revision(versions, user=None, comment="", meta=(), date_created=None,
|
248 | 249 | # Save the revision.
|
249 | 250 | revision.save(using=using)
|
250 | 251 | # Save version models.
|
| 252 | + |
| 253 | + can_use_bulk_create = connections[using].features.can_return_rows_from_bulk_insert |
| 254 | + |
251 | 255 | for version in versions:
|
252 | 256 | 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 | + |
254 | 263 | # Save the meta information.
|
255 | 264 | for meta_model, meta_fields in meta:
|
256 | 265 | meta_model._base_manager.db_manager(using=using).create(
|
|
0 commit comments