Python 管理器中的链接查询集

Python 管理器中的链接查询集,python,django,Python,Django,我正在寻找一种方法,在需要软删除的模型上使用queryset重用这个抽象模型/管理器,但我的一些模型已经有自定义的管理器/查询集。理想情况下,我希望所有其他经理都使用SoftDeletemanager/queryset,这样他们总是只返回未删除的项目。在Django 1.10中有没有实现这一点的方法 class SoftDeleteQuerySet(QuerySet): def delete(self): for obj in self: obj.

我正在寻找一种方法,在需要软删除的模型上使用queryset重用这个抽象模型/管理器,但我的一些模型已经有自定义的管理器/查询集。理想情况下,我希望所有其他经理都使用
SoftDelete
manager/queryset,这样他们总是只返回未删除的项目。在Django 1.10中有没有实现这一点的方法

class SoftDeleteQuerySet(QuerySet):
    def delete(self):
        for obj in self:
            obj.is_active = False
            obj.save()

    def undelete(self):
        for obj in self:
            obj.is_active = True
            obj.save()

class SoftDeleteManager(Manager):
    def get_queryset():
        return SoftDeleteQuerySet(self.model, using=self._db).filter(is_active=True)

class SoftDelete(Model):
    is_active = m.BooleanField(default=True)

    objects = SoftDeleteManager()

    class Meta:
        abstract = True

    def delete(self):
        self.is_active = False
        self.save()

    def undelete(self):
        self.is_active = True
        self.save()

只需将模型的父类从
Model
更改为
SoftDelete

class MyModel1(SoftDelete):
    # ...

    objects = MyModel1Manager()
对于您的经理来说:

class MyModel1Manager(SoftDeleteManager):
    # ...
此外,对于get_queryset上的继承(如注释中所述),您应该使用如下内容:

class MyModel1Manager(SoftDeleteManager):
    def get_queryset(self):
        return super().get_queryset().filter(...)

你不需要链接,你需要继承。我猜你在考虑管理者继承,对吗?我尝试过管理器继承,但据我所知,您仍然必须重写
get\u queryset
,但我不知道如何实现它。这就是它的有趣之处。如果您想在
super().get\u queryset()
上应用
MyModel1QuerySet
方法,那么它必须有所不同。我认为再添加一个继承将解决这个问题(
MyModel1QuerySet
也应该继承自
SoftDeleteQuerySet
)。基本上,您的模型、管理器和查询集应该继承自
SoftDelete