温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - General rule for Django model class to always exclude "unpublished" instances
django

其他 - Django模型类始终排除“未发布”实例的一般规则

发布于 2020-03-27 10:19:07

我正在寻找一种方法来制定一些规则,以排除每个查询集中的某些实例。要遵循DRY并确保I(或其他人)不会意外地在查询中包括未接受的实例。我在Djnago相对较新,没有找到解决此问题的API。

class SomeClassModel(models.Model):
    value = models.CharField(max_length=244)
    accepted = models.BooleanField(default=False)

我(或其他人)如何从所有查询中排除未接受的实例?即使我这样做 SomeClassModel.objects.all()

查看更多

查看更多

提问者
khashashin
被浏览
155
Jon Clements 2019-07-05 21:34

您可以使用ModelManager和覆盖默认值objects,例如:

class ExcludeNotAccepted(models.Manager):
    def get_queryset(self):
        return super().get_queryset().exclude(accepted=False)

class SomeClassModel(models.Model):
    value = models.CharField(max_length=244)
    accepted = models.BooleanField(default=False)

    # make the default objects exclusive of non-accepted
    objects = ExcludeNotAccepted()
    # still allow explicit access via another name
    all_objects = models.Manager()

在访问SomeClassModel.objects.all()时自动过滤掉不可接受的项目具有预期的效果,但是您仍然可以通过显式使用SomeClassModel.all_objects.all()... 访问所有对象