如何通过 mixins 继承多个查询集过滤器



我在模型管理器中有一个QuerySetMixin

models.py:

class MyModel(models.Model):
objects = SoftDeletableManager()

managers.py:

class SoftDeletableManager(SoftDeletableManagerMixin, models.Manager):
pass
class SoftDeletableQuerySet(QuerySet):
pass
class SoftDeletableManagerMixin:
_queryset_class = SoftDeletableQuerySet
def get_queryset(self):
return self._queryset_class(
model=self.model, 
using=self._db,
**kwargs).filter(is_removed=False)

我想定义第二个QuerySetMixin,用于显示SoftDeletableManagerMixin的结果并对其进行过滤。我该怎么做?

例如

class MyManagerMixin:
def get_queryset(self):
return self.[inherit other querysets].filter(mynewfilter=True)

如果继承它,则可能需要使用super()代理对象:

class SoftDeletableManagerMixin:
_queryset_class = SoftDeletableQuerySet
def get_queryset(self):
returnsuper().get_queryset().filter(is_removed=False)

你的第二个混音也是如此:

class MyManagerMixin:
def get_queryset(self):
returnsuper().get_queryset().filter(mynewfilter=True)

然后,您可以使用以下内容创建经理:

class MyNewManager(MyManagerMixin, SoftDeletableManagerMixin, Manager):
pass

最新更新