如何在django queryset上创建默认过滤器



我有以下模型在我的django应用程序:

class Segment(BaseSegmentModel):
payload_json = JSONField(null=True, default=None, blank=True)
owner = models.ForeignKey(CustomUser, null=True, blank=True, on_delete=models.SET_NULL, related_name='segments')
name = models.CharField(max_length=100, null=True, blank=False)
status = models.CharField(max_length=100, null=True, blank=True, choices=SegmentStatuses.choices, default=SegmentStatuses.STOPPED)
created_date = models.DateTimeField(null=True, auto_now_add=True)

有一个字段状态,它有三个值:

class SegmentStatuses:
STOPPED = 'stopped'
ACTIVE = 'active'
ARCHIVE = 'archive'
choices = ((STOPPED, STOPPED), (ACTIVE, ACTIVE), (ARCHIVE, ARCHIVE))

我需要在这个模型上添加一个默认过滤器,它不应该显示status = Archive的任何结果。

所以当有人查询这个模型时,它不应该显示任何存档结果。

你的模型可以有2个管理器:一个用于所有对象,一个用于排除的对象

class SegmentStatuses:
STOPPED = 'stopped'
ACTIVE = 'active'
ARCHIVE = 'archive'
choices = ((STOPPED, STOPPED), (ACTIVE, ACTIVE), (ARCHIVE, ARCHIVE))
class UnArchivedManager(models.Manager):
def get_queryset(self):
return super(UnArchivedManager, self).get_queryset().exclude(status=SegmentStatuses.ARCHIVE)

class Segment(BaseSegmentModel):
payload_json = JSONField(null=True, default=None, blank=True)
owner = models.ForeignKey(CustomUser, null=True, blank=True, on_delete=models.SET_NULL, related_name='segments')
name = models.CharField(max_length=100, null=True, blank=False)
status = models.CharField(max_length=100, null=True, blank=True, choices=SegmentStatuses.choices, default=SegmentStatuses.STOPPED)
created_date = models.DateTimeField(null=True, auto_now_add=True)

objects = UnArchivedManager()
objects_all = models.Manager()

正如你在这张图片中所看到的,我在DB中只有一个对象,它有"存档"状态,所以当我使用"对象"管理器时,我在结果中没有看到任何对象,但是当我使用"object_all"管理器时,我在结果中看到了1个对象

示例查询

如果您根本不想访问归档状态,您可以忽略objects_all管理器。

相关内容

  • 没有找到相关文章

最新更新