QuerySet自动/方面过滤

时间:2012-10-13 15:01:30

标签: python django oop django-models django-admin

我有一个具有active字段的模型,我想根据此字段过滤掉所有不活动的记录。让我们说:

Record(Model):
    active = BooleanField()
    ...

过滤掉我可以做到:

Record.objects(active=True)

但这是一般情况,我希望几乎任何时候都可以过滤掉非活动记录。遵循DRY原则的最佳方法是什么,不要像上面的示例那样过滤我手动执行的每个请求,同时保留管理面板中管理非活动记录的能力。

1 个答案:

答案 0 :(得分:1)

您可以使用Managers来完成此任务:

# First, define the Manager subclass.
class ActiveManager(models.Manager):
    def get_query_set(self):
        return super(ActiveManager, self).get_query_set().filter(active=True)

# Then hook it into the Record model explicitly.
class Record(models.Model):
    active = BooleanField()

    objects = models.Manager() # The default manager.
    active_objects = ActiveManager() # The specific manager.

#to filter for all active records you can do:
Record.active_objects.all()