File tree 3 files changed +16
-5
lines changed
3 files changed +16
-5
lines changed Original file line number Diff line number Diff line change @@ -16,6 +16,7 @@ To be released
16
16
- Make `soft ` argument to `SoftDeletableModel.delete() ` keyword-only
17
17
- `JoinManager ` and `JoinManagerMixin ` have been deprecated;
18
18
please use ``JoinQueryset.as_manager() `` instead
19
+ - Change `SoftDeletableQuerySetMixin.delete ` to replicate Django's API.
19
20
20
21
4.5.1 (2024-05-02)
21
22
------------------
Original file line number Diff line number Diff line change @@ -363,17 +363,17 @@ class SoftDeletableQuerySetMixin(Generic[ModelT]):
363
363
its ``is_removed`` field to True.
364
364
"""
365
365
366
- def delete (self ) -> None :
366
+ def delete (self ) -> tuple [ int , dict [ str , int ]] :
367
367
"""
368
368
Soft delete objects from queryset (set their ``is_removed``
369
369
field to True)
370
370
"""
371
- cast (QuerySet [ModelT ], self ).update (is_removed = True )
371
+ model : type [ModelT ] = self .model # type: ignore[attr-defined]
372
+ number_of_deleted_objects = cast (QuerySet [ModelT ], self ).update (is_removed = True )
373
+ return number_of_deleted_objects , {model ._meta .label : number_of_deleted_objects }
372
374
373
375
374
- # Note that our delete() method does not return anything, unlike Django's.
375
- # https://github.com/jazzband/django-model-utils/issues/541
376
- class SoftDeletableQuerySet (SoftDeletableQuerySetMixin [ModelT ], QuerySet [ModelT ]): # type: ignore[misc]
376
+ class SoftDeletableQuerySet (SoftDeletableQuerySetMixin [ModelT ], QuerySet [ModelT ]):
377
377
pass
378
378
379
379
Original file line number Diff line number Diff line change @@ -53,3 +53,13 @@ def test_instance_purge_no_connection(self) -> None:
53
53
54
54
def test_deprecation_warning (self ) -> None :
55
55
self .assertWarns (DeprecationWarning , SoftDeletable .objects .all )
56
+
57
+ def test_delete_queryset_return (self ) -> None :
58
+ SoftDeletable .available_objects .create (name = 'a' )
59
+ SoftDeletable .available_objects .create (name = 'b' )
60
+
61
+ result = SoftDeletable .available_objects .filter (name = "a" ).delete ()
62
+
63
+ assert result == (
64
+ 1 , {SoftDeletable ._meta .label : 1 }
65
+ )
You can’t perform that action at this time.
0 commit comments