mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #27385 -- Fixed QuerySet.bulk_create() on PostgreSQL when the number of objects is a multiple plus one of batch_size.
This commit is contained in:
		
				
					committed by
					
						 Tim Graham
						Tim Graham
					
				
			
			
				
	
			
			
			
						parent
						
							a9d1d95284
						
					
				
				
					commit
					b3bd3aa07c
				
			| @@ -1052,9 +1052,9 @@ class QuerySet(object): | ||||
|         for item in [objs[i:i + batch_size] for i in range(0, len(objs), batch_size)]: | ||||
|             if connections[self.db].features.can_return_ids_from_bulk_insert: | ||||
|                 inserted_id = self._insert(item, fields=fields, using=self.db, return_id=True) | ||||
|                 if len(objs) > 1: | ||||
|                 if isinstance(inserted_id, list): | ||||
|                     inserted_ids.extend(inserted_id) | ||||
|                 if len(objs) == 1: | ||||
|                 else: | ||||
|                     inserted_ids.append(inserted_id) | ||||
|             else: | ||||
|                 self._insert(item, fields=fields, using=self.db) | ||||
|   | ||||
| @@ -20,3 +20,6 @@ Bugfixes | ||||
|  | ||||
| * Made the ``JavaScriptCatalog`` view respect the ``packages`` argument; | ||||
|   previously it was ignored (:ticket:`27374`). | ||||
|  | ||||
| * Fixed ``QuerySet.bulk_create()`` on PostgreSQL when the number of objects is | ||||
|   a multiple plus one of ``batch_size`` (:ticket:`27385`). | ||||
|   | ||||
| @@ -171,11 +171,18 @@ class BulkCreateTests(TestCase): | ||||
|  | ||||
|     def test_explicit_batch_size(self): | ||||
|         objs = [TwoFields(f1=i, f2=i) for i in range(0, 4)] | ||||
|         TwoFields.objects.bulk_create(objs, 2) | ||||
|         self.assertEqual(TwoFields.objects.count(), len(objs)) | ||||
|         num_objs = len(objs) | ||||
|         TwoFields.objects.bulk_create(objs, batch_size=1) | ||||
|         self.assertEqual(TwoFields.objects.count(), num_objs) | ||||
|         TwoFields.objects.all().delete() | ||||
|         TwoFields.objects.bulk_create(objs, len(objs)) | ||||
|         self.assertEqual(TwoFields.objects.count(), len(objs)) | ||||
|         TwoFields.objects.bulk_create(objs, batch_size=2) | ||||
|         self.assertEqual(TwoFields.objects.count(), num_objs) | ||||
|         TwoFields.objects.all().delete() | ||||
|         TwoFields.objects.bulk_create(objs, batch_size=3) | ||||
|         self.assertEqual(TwoFields.objects.count(), num_objs) | ||||
|         TwoFields.objects.all().delete() | ||||
|         TwoFields.objects.bulk_create(objs, batch_size=num_objs) | ||||
|         self.assertEqual(TwoFields.objects.count(), num_objs) | ||||
|  | ||||
|     def test_empty_model(self): | ||||
|         NoFields.objects.bulk_create([NoFields() for i in range(2)]) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user