毫不掩饰软删除的情况下,同时使用`get_or_create`

问题描述 投票:3回答:2

比方说,你在你的经理是这样的修改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()方法,它创建一个实例。我们能否在创建不影被软删除的实例?

python django django-models
2个回答
0
投票

你可以尝试重写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)

0
投票

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)和软删除实例的方法将不会隐藏。

© www.soinside.com 2019 - 2024. All rights reserved.