Ticket #28099: delete_on_update_bug_update.diff
File delete_on_update_bug_update.diff, 3.1 KB (added by , 8 years ago) |
---|
-
django/db/models/deletion.py
diff --git a/django/db/models/deletion.py b/django/db/models/deletion.py index 5370114..753f4f5 100644
a b class Collector: 285 285 286 286 # update fields 287 287 for model, instances_for_fieldvalues in self.field_updates.items(): 288 query = sql.UpdateQuery(model)289 288 for (field, value), instances in instances_for_fieldvalues.items(): 289 query = sql.UpdateQuery(model) 290 290 query.update_batch([obj.pk for obj in instances], 291 291 {field.name: value}, self.using) 292 292 -
tests/delete_regress/models.py
diff --git a/tests/delete_regress/models.py b/tests/delete_regress/models.py index f0145de..981be50 100644
a b class OrderedPerson(models.Model): 139 139 140 140 class Meta: 141 141 ordering = ['name'] 142 143 def status_on_delete(collector, field, sub_objs, using): 144 priority1 = sub_objs.filter(priority=1) 145 priority2 = sub_objs.filter(priority=2) 146 147 levelA_field = field.model._meta.get_field('levelA') 148 levelB_field = field.model._meta.get_field('levelB') 149 150 collector.add_field_update(levelA_field, 11, priority1) 151 collector.add_field_update(levelB_field, 12, priority2) 152 153 models.SET_NULL(collector, field, sub_objs, using) 154 155 156 class Status(models.Model): 157 pass 158 159 160 class Report(models.Model): 161 status = models.ForeignKey(Status, null=True, blank=True, 162 on_delete=status_on_delete) 163 priority = models.IntegerField() 164 levelA = models.IntegerField() 165 levelB = models.IntegerField() -
tests/delete_regress/tests.py
diff --git a/tests/delete_regress/tests.py b/tests/delete_regress/tests.py index 7472731..81d384a 100644
a b from .models import ( 7 7 Award, AwardNote, Book, Child, Eaten, Email, File, Food, FooFile, 8 8 FooFileProxy, FooImage, FooPhoto, House, Image, Item, Location, Login, 9 9 OrderedPerson, OrgUnit, Person, Photo, PlayedWith, PlayedWithNote, Policy, 10 Researcher, Toy, Version, 11 ) 10 Researcher, Toy, Version, Status, Report) 12 11 13 12 14 13 # Can't run this test under SQLite, because you can't … … class OrderedDeleteTests(TestCase): 343 342 OrderedPerson.objects.create(name='Bob', lives_in=h) 344 343 OrderedPerson.objects.filter(lives_in__address='Foo').delete() 345 344 self.assertEqual(OrderedPerson.objects.count(), 0) 345 346 class CollectorUpdateTests(TestCase): 347 def test_delete_with_custom_handlers(self): 348 349 status, _ = Status.objects.get_or_create() 350 351 p1 = Report.objects.create(status=status, priority=1, levelA=1, levelB=0) 352 353 p2 = Report.objects.create(status=status, priority=2, levelA=2, levelB=0) 354 355 status.delete() 356 357 p1 = Report.objects.get(id=p1.pk) 358 self.assertEqual(p1.levelA, 11) 359 self.assertEqual(p1.levelB, 0) 360 361 p2 = Report.objects.get(id=p2.pk) 362 self.assertEqual(p2.levelA, 2) 363 self.assertEqual(p2.levelB, 12)