mirror of
https://github.com/Hopiu/django-model-utils.git
synced 2026-03-16 20:00:23 +00:00
Merge pull request #612 from ProtixIT/generate-custom-soft-delete-manager
Auto-generate manager implementation for `CustomSoftDelete`
This commit is contained in:
commit
ba9ac5db81
3 changed files with 19 additions and 22 deletions
|
|
@ -1,13 +0,0 @@
|
|||
from model_utils.managers import SoftDeletableManager, SoftDeletableQuerySet
|
||||
|
||||
|
||||
class CustomSoftDeleteQuerySet(SoftDeletableQuerySet):
|
||||
def only_read(self):
|
||||
return self.filter(is_read=True)
|
||||
|
||||
|
||||
class CustomSoftDeleteManager(SoftDeletableManager):
|
||||
_queryset_class = CustomSoftDeleteQuerySet
|
||||
|
||||
def only_read(self):
|
||||
return self.get_queryset().only_read()
|
||||
|
|
@ -9,7 +9,13 @@ from django.utils.translation import gettext_lazy as _
|
|||
|
||||
from model_utils import Choices
|
||||
from model_utils.fields import MonitorField, SplitField, StatusField, UUIDField
|
||||
from model_utils.managers import InheritanceManager, JoinManager, QueryManager
|
||||
from model_utils.managers import (
|
||||
InheritanceManager,
|
||||
JoinManager,
|
||||
QueryManager,
|
||||
SoftDeletableManager,
|
||||
SoftDeletableQuerySet,
|
||||
)
|
||||
from model_utils.models import (
|
||||
SoftDeletableModel,
|
||||
StatusModel,
|
||||
|
|
@ -19,7 +25,6 @@ from model_utils.models import (
|
|||
)
|
||||
from model_utils.tracker import FieldTracker, ModelTracker
|
||||
from tests.fields import MutableField
|
||||
from tests.managers import CustomSoftDeleteManager
|
||||
|
||||
|
||||
class InheritanceManagerTestRelated(models.Model):
|
||||
|
|
@ -347,10 +352,15 @@ class SoftDeletable(SoftDeletableModel):
|
|||
all_objects: ClassVar[Manager[SoftDeletable]] = models.Manager()
|
||||
|
||||
|
||||
class CustomSoftDeleteQuerySet(SoftDeletableQuerySet):
|
||||
def only_read(self):
|
||||
return self.filter(is_read=True)
|
||||
|
||||
|
||||
class CustomSoftDelete(SoftDeletableModel):
|
||||
is_read = models.BooleanField(default=False)
|
||||
|
||||
objects: ClassVar[CustomSoftDeleteManager[SoftDeletableModel]] = CustomSoftDeleteManager()
|
||||
available_objects = SoftDeletableManager.from_queryset(CustomSoftDeleteQuerySet)() # type: ignore[misc]
|
||||
|
||||
|
||||
class StringyDescriptor:
|
||||
|
|
|
|||
|
|
@ -6,21 +6,21 @@ from tests.models import CustomSoftDelete
|
|||
class CustomSoftDeleteManagerTests(TestCase):
|
||||
|
||||
def test_custom_manager_empty(self):
|
||||
qs = CustomSoftDelete.objects.only_read()
|
||||
qs = CustomSoftDelete.available_objects.only_read()
|
||||
self.assertEqual(qs.count(), 0)
|
||||
|
||||
def test_custom_qs_empty(self):
|
||||
qs = CustomSoftDelete.objects.all().only_read()
|
||||
qs = CustomSoftDelete.available_objects.all().only_read()
|
||||
self.assertEqual(qs.count(), 0)
|
||||
|
||||
def test_is_read(self):
|
||||
for is_read in [True, False, True, False]:
|
||||
CustomSoftDelete.objects.create(is_read=is_read)
|
||||
qs = CustomSoftDelete.objects.only_read()
|
||||
CustomSoftDelete.available_objects.create(is_read=is_read)
|
||||
qs = CustomSoftDelete.available_objects.only_read()
|
||||
self.assertEqual(qs.count(), 2)
|
||||
|
||||
def test_is_read_removed(self):
|
||||
for is_read, is_removed in [(True, True), (True, False), (False, False), (False, True)]:
|
||||
CustomSoftDelete.objects.create(is_read=is_read, is_removed=is_removed)
|
||||
qs = CustomSoftDelete.objects.only_read()
|
||||
CustomSoftDelete.available_objects.create(is_read=is_read, is_removed=is_removed)
|
||||
qs = CustomSoftDelete.available_objects.only_read()
|
||||
self.assertEqual(qs.count(), 1)
|
||||
|
|
|
|||
Loading…
Reference in a new issue