Fixed #29974 -- Fixed non-truthy primary key values for QuerySet.bulk_update().
This commit is contained in:
parent
5a71bd7f9d
commit
31408446b3
|
@ -490,7 +490,7 @@ class QuerySet:
|
|||
if not fields:
|
||||
raise ValueError('Field names must be given to bulk_update().')
|
||||
objs = tuple(objs)
|
||||
if not all(obj.pk for obj in objs):
|
||||
if any(obj.pk is None for obj in objs):
|
||||
raise ValueError('All bulk_update() objects must have a primary key set.')
|
||||
fields = [self.model._meta.get_field(name) for name in fields]
|
||||
if any(not f.concrete or f.many_to_many for f in fields):
|
||||
|
|
|
@ -591,6 +591,7 @@ class MyObject(models.Model):
|
|||
|
||||
class Order(models.Model):
|
||||
id = models.IntegerField(primary_key=True)
|
||||
name = models.CharField(max_length=12, null=True, default='')
|
||||
|
||||
class Meta:
|
||||
ordering = ('pk',)
|
||||
|
|
|
@ -7,7 +7,7 @@ from django.test import TestCase
|
|||
|
||||
from .models import (
|
||||
Article, CustomDbColumn, CustomPk, Detail, Individual, Member, Note,
|
||||
Number, Paragraph, SpecialCategory, Tag, Valid,
|
||||
Number, Order, Paragraph, SpecialCategory, Tag, Valid,
|
||||
)
|
||||
|
||||
|
||||
|
@ -167,6 +167,13 @@ class BulkUpdateTests(TestCase):
|
|||
[cat.extra for cat in custom_pks]
|
||||
)
|
||||
|
||||
def test_falsey_pk_value(self):
|
||||
order = Order.objects.create(pk=0, name='test')
|
||||
order.name = 'updated'
|
||||
Order.objects.bulk_update([order], ['name'])
|
||||
order.refresh_from_db()
|
||||
self.assertEqual(order.name, 'updated')
|
||||
|
||||
def test_inherited_fields(self):
|
||||
special_categories = [
|
||||
SpecialCategory.objects.create(name=str(i), special_name=str(i))
|
||||
|
|
Loading…
Reference in New Issue