summaryrefslogtreecommitdiff
path: root/tests/delete
diff options
context:
space:
mode:
authorAlexander Sosnovskiy <alecs.box@gmail.com>2015-03-07 11:56:25 +0300
committerTim Graham <timograham@gmail.com>2015-05-22 13:27:16 -0400
commit04e8d890aec8e996d568565555164a27a6a76057 (patch)
tree7d23bdbe7e73bc50bb853b4bcd212f26bab82f0a /tests/delete
parent9c8a2ab81db1fa999862034d9e8e9e1d091a72e5 (diff)
Fixed #16891 -- Made Model/QuerySet.delete() return the number of deleted objects.
Diffstat (limited to 'tests/delete')
-rw-r--r--tests/delete/tests.py57
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):