mirror of
https://github.com/django/django.git
synced 2025-08-04 19:08:28 +00:00
Fixed #16891 -- Made Model/QuerySet.delete() return the number of deleted objects.
This commit is contained in:
parent
9c8a2ab81d
commit
04e8d890ae
9 changed files with 120 additions and 20 deletions
|
@ -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):
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue