1
0
mirror of https://github.com/django/django.git synced 2025-10-29 00:26:07 +00:00

Fixed #34171 -- Fixed QuerySet.bulk_create() on fields with db_column in unique_fields/update_fields.

Bug in 0f6946495a.

Thanks Joshua Brooks for the report.
This commit is contained in:
DevilsAutumn
2022-11-22 15:04:55 +05:30
committed by Mariusz Felisiak
parent 7d5329852f
commit 4035bab56f
5 changed files with 46 additions and 7 deletions

View File

@@ -720,7 +720,6 @@ class QuerySet(AltersData):
"Unique fields that can trigger the upsert must be provided."
)
# Updating primary keys and non-concrete fields is forbidden.
update_fields = [self.model._meta.get_field(name) for name in update_fields]
if any(not f.concrete or f.many_to_many for f in update_fields):
raise ValueError(
"bulk_create() can only be used with concrete fields in "
@@ -732,9 +731,6 @@ class QuerySet(AltersData):
"update_fields."
)
if unique_fields:
unique_fields = [
self.model._meta.get_field(name) for name in unique_fields
]
if any(not f.concrete or f.many_to_many for f in unique_fields):
raise ValueError(
"bulk_create() can only be used with concrete fields "
@@ -786,8 +782,11 @@ class QuerySet(AltersData):
if unique_fields:
# Primary key is allowed in unique_fields.
unique_fields = [
opts.pk.name if name == "pk" else name for name in unique_fields
self.model._meta.get_field(opts.pk.name if name == "pk" else name)
for name in unique_fields
]
if update_fields:
update_fields = [self.model._meta.get_field(name) for name in update_fields]
on_conflict = self._check_bulk_create_options(
ignore_conflicts,
update_conflicts,