比方说,你在你的经理是这样的修改get_queryset
class VoteManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(is_deleted=False)
class Vote(models.Model):
objects = VoteManager()
这工作正常,但是当你使用类似的投票模式get_or_create
问题,即使它是存在于数据库中,因为我们修改了get_queryset()方法,它创建一个实例。我们能否在创建不影被软删除的实例?
你可以尝试重写get_or_create方法了。像这样:
class VoteQuerySet(models.query.QuerySet):
def get_or_create(...):
"""Your realization"""
class VoteManager(models.Manager):
def get_queryset(self):
return VoteQuerySet(model=self.model, using=self._db, hints=self._hints).filter(is_deleted=False)
qazxsw POI是从qazxsw POI(检查qazxsw POI)的方法。解决这个问题的方法之一是get_or_create()
并覆盖此方法不能掩盖被软删除的情况。
另一种方法是创建一个经理和覆盖Queryset
方法把一个标志返回从数据库中的所有项目(甚至软删除的情况下),就像这样:
this
现在,您可以拨打create your own queryset class和软删除的情况下,将不被隐藏。
all()
class VoteManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(is_deleted=False)
def all(self, force_all=False):
if force_all:
return super().get_queryset() # queryset with all items
return self.get_queryset() # queryset without soft-deleted items
返回与数据库中的所有项的查询集。您可以致电在这个查询集一样get_or_create()
,Vote.objects.all(force_all=True).get_or_create(**data)
,Vote.objects.all(force_all=True)
和软删除实例的方法将不会隐藏。