This commit is contained in:
parent
e6f36ea0a9
commit
c627226d05
|
@ -834,11 +834,22 @@ class QuerySet:
|
|||
|
||||
return objs
|
||||
|
||||
async def abulk_create(self, objs, batch_size=None, ignore_conflicts=False):
|
||||
async def abulk_create(
|
||||
self,
|
||||
objs,
|
||||
batch_size=None,
|
||||
ignore_conflicts=False,
|
||||
update_conflicts=False,
|
||||
update_fields=None,
|
||||
unique_fields=None,
|
||||
):
|
||||
return await sync_to_async(self.bulk_create)(
|
||||
objs=objs,
|
||||
batch_size=batch_size,
|
||||
ignore_conflicts=ignore_conflicts,
|
||||
update_conflicts=update_conflicts,
|
||||
update_fields=update_fields,
|
||||
unique_fields=unique_fields,
|
||||
)
|
||||
|
||||
def bulk_update(self, objs, fields, batch_size=None):
|
||||
|
|
|
@ -6,7 +6,7 @@ from asgiref.sync import async_to_sync, sync_to_async
|
|||
|
||||
from django.db import NotSupportedError, connection
|
||||
from django.db.models import Sum
|
||||
from django.test import TestCase, skipUnlessDBFeature
|
||||
from django.test import TestCase, skipIfDBFeature, skipUnlessDBFeature
|
||||
|
||||
from .models import SimpleModel
|
||||
|
||||
|
@ -111,6 +111,22 @@ class AsyncQuerySetTest(TestCase):
|
|||
qs = await SimpleModel.objects.abulk_create(instances)
|
||||
self.assertEqual(len(qs), 10)
|
||||
|
||||
@skipUnlessDBFeature("has_bulk_insert", "supports_update_conflicts")
|
||||
@skipIfDBFeature("supports_update_conflicts_with_target")
|
||||
@async_to_sync
|
||||
async def test_update_conflicts_unique_field_unsupported(self):
|
||||
msg = (
|
||||
"This database backend does not support updating conflicts with specifying "
|
||||
"unique fields that can trigger the upsert."
|
||||
)
|
||||
with self.assertRaisesMessage(NotSupportedError, msg):
|
||||
await SimpleModel.objects.abulk_create(
|
||||
[SimpleModel(field=1), SimpleModel(field=2)],
|
||||
update_conflicts=True,
|
||||
update_fields=["field"],
|
||||
unique_fields=["created"],
|
||||
)
|
||||
|
||||
async def test_abulk_update(self):
|
||||
instances = SimpleModel.objects.all()
|
||||
async for instance in instances:
|
||||
|
|
Loading…
Reference in New Issue