diff options
| author | Alexander Sosnovskiy <alecs.box@gmail.com> | 2015-03-07 11:56:25 +0300 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2015-05-22 13:27:16 -0400 |
| commit | 04e8d890aec8e996d568565555164a27a6a76057 (patch) | |
| tree | 7d23bdbe7e73bc50bb853b4bcd212f26bab82f0a /tests/delete | |
| parent | 9c8a2ab81db1fa999862034d9e8e9e1d091a72e5 (diff) | |
Fixed #16891 -- Made Model/QuerySet.delete() return the number of deleted objects.
Diffstat (limited to 'tests/delete')
| -rw-r--r-- | tests/delete/tests.py | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/tests/delete/tests.py b/tests/delete/tests.py index dd3c427824..11e780bfac 100644 --- a/tests/delete/tests.py +++ b/tests/delete/tests.py @@ -137,6 +137,7 @@ class OnDeleteTests(TestCase): class DeletionTests(TestCase): + def test_m2m(self): m = M.objects.create() r = R.objects.create() @@ -356,6 +357,62 @@ class DeletionTests(TestCase): self.assertFalse(RChild.objects.filter(id=child.id).exists()) self.assertTrue(R.objects.filter(id=parent_id).exists()) + def test_queryset_delete_returns_num_rows(self): + """ + QuerySet.delete() should return the number of deleted rows and a + dictionary with the number of deletions for each object type. + """ + Avatar.objects.bulk_create([Avatar(desc='a'), Avatar(desc='b'), Avatar(desc='c')]) + avatars_count = Avatar.objects.count() + deleted, rows_count = Avatar.objects.all().delete() + self.assertEqual(deleted, avatars_count) + + # more complex example with multiple object types + r = R.objects.create() + h1 = HiddenUser.objects.create(r=r) + HiddenUser.objects.create(r=r) + HiddenUserProfile.objects.create(user=h1) + existed_objs = { + R._meta.label: R.objects.count(), + HiddenUser._meta.label: HiddenUser.objects.count(), + A._meta.label: A.objects.count(), + MR._meta.label: MR.objects.count(), + HiddenUserProfile._meta.label: HiddenUserProfile.objects.count(), + } + deleted, deleted_objs = R.objects.all().delete() + for k, v in existed_objs.items(): + self.assertEqual(deleted_objs[k], v) + + def test_model_delete_returns_num_rows(self): + """ + Model.delete() should return the number of deleted rows and a + dictionary with the number of deletions for each object type. + """ + r = R.objects.create() + h1 = HiddenUser.objects.create(r=r) + h2 = HiddenUser.objects.create(r=r) + HiddenUser.objects.create(r=r) + HiddenUserProfile.objects.create(user=h1) + HiddenUserProfile.objects.create(user=h2) + m1 = M.objects.create() + m2 = M.objects.create() + MR.objects.create(r=r, m=m1) + r.m_set.add(m1) + r.m_set.add(m2) + r.save() + existed_objs = { + R._meta.label: R.objects.count(), + HiddenUser._meta.label: HiddenUser.objects.count(), + A._meta.label: A.objects.count(), + MR._meta.label: MR.objects.count(), + HiddenUserProfile._meta.label: HiddenUserProfile.objects.count(), + M.m2m.through._meta.label: M.m2m.through.objects.count(), + } + deleted, deleted_objs = r.delete() + self.assertEqual(deleted, sum(existed_objs.values())) + for k, v in existed_objs.items(): + self.assertEqual(deleted_objs[k], v) + class FastDeleteTests(TestCase): |
