在管理器中链接查询集



我正在寻找一种方法来重用这个抽象模型/管理器,并在需要软删除的模型上使用查询集,但我的一些模型已经有自定义管理器/查询集。理想情况下,我希望所有其他经理都使用SoftDelete管理器/查询集,以便它们始终只返回未删除的项目。有没有办法在 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(...)

最新更新