|
@@ -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)
|
|
|
+
|
|
|
+
|
|
|
+ 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):
|
|
|
|