mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #29974 -- Fixed non-truthy primary key values for QuerySet.bulk_update().
This commit is contained in:
		| @@ -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)) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user