Merge pull request #727 from DavidBord/fix-725
fix-#725: queryset delete() should return the number of deleted objects
This commit is contained in:
		| @@ -405,6 +405,7 @@ class BaseQuerySet(object): | ||||
|             will force an fsync on the primary server. | ||||
|         :param _from_doc_delete: True when called from document delete therefore | ||||
|             signals will have been triggered so don't loop. | ||||
|         :returns number of deleted documents | ||||
|         """ | ||||
|         queryset = self.clone() | ||||
|         doc = queryset._document | ||||
| @@ -422,9 +423,11 @@ class BaseQuerySet(object): | ||||
|                                 has_delete_signal) and not _from_doc_delete | ||||
|  | ||||
|         if call_document_delete: | ||||
|             cnt = 0 | ||||
|             for doc in queryset: | ||||
|                 doc.delete(write_concern=write_concern) | ||||
|             return | ||||
|                 cnt += 1 | ||||
|             return cnt | ||||
|  | ||||
|         delete_rules = doc._meta.get('delete_rules') or {} | ||||
|         # Check for DENY rules before actually deleting/nullifying any other | ||||
| @@ -455,8 +458,8 @@ class BaseQuerySet(object): | ||||
|                     write_concern=write_concern, | ||||
|                     **{'pull_all__%s' % field_name: self}) | ||||
|  | ||||
|         queryset._collection.remove( | ||||
|             queryset._query, write_concern=write_concern) | ||||
|         result = queryset._collection.remove(queryset._query, write_concern=write_concern) | ||||
|         return result["n"] | ||||
|  | ||||
|     def update(self, upsert=False, multi=True, write_concern=None, | ||||
|                full_result=False, **update): | ||||
|   | ||||
| @@ -4390,6 +4390,17 @@ class QuerySetTest(unittest.TestCase): | ||||
|             {'_id': None, 'avg': 29, 'total': 2} | ||||
|         ]) | ||||
|  | ||||
|     def test_delete_count(self): | ||||
|         [self.Person(name="User {0}".format(i), age=i * 10).save() for i in xrange(1, 4)] | ||||
|         self.assertEqual(self.Person.objects().delete(), 3)  # test ordinary QuerySey delete count | ||||
|  | ||||
|         [self.Person(name="User {0}".format(i), age=i * 10).save() for i in xrange(1, 4)] | ||||
|  | ||||
|         self.assertEqual(self.Person.objects().skip(1).delete(), 2)  # test Document delete with existing documents | ||||
|  | ||||
|         self.Person.objects().delete() | ||||
|         self.assertEqual(self.Person.objects().skip(1).delete(), 0)  # test Document delete without existing documents | ||||
|  | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     unittest.main() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user