Python Django模型中的默认过滤器

Python Django模型中的默认过滤器,python,django,model,Python,Django,Model,是否可以在Django模型中设置默认过滤器 比如: class MyModel(models.Model): timestamp = models.DateTimeField(default=datetime.utcnow) active = models.BooleanField(default=True) class Meta: ordering = ['-timestamp'] filtering = [active=True]

是否可以在Django模型中设置默认过滤器

比如:

class MyModel(models.Model):
    timestamp = models.DateTimeField(default=datetime.utcnow)
    active = models.BooleanField(default=True)

    class Meta:
        ordering = ['-timestamp']
        filtering = [active=True]

您必须覆盖以下选项:


get\u queryset
在Django 1.6之前是
get\u query\u set
,通过向模型中添加管理器,我能够实现我想要的功能。我还创建了一个抽象基类,以便于将其添加到其他模型中,而无需复制相同的代码-下面是修改后的示例:

class MyActiveManager(models.Manager):
    def get_queryset(self):
        return super(MyModelManager, self).get_queryset().filter(active=True)

class MyInactiveManager(models.Manager):
    def get_queryset(self):
        return super(MyModelManager, self).get_queryset().filter(active=False)

class AbstractModel(models.Model):
    timestamp = models.DateTimeField(default=datetime.utcnow)
    active = models.BooleanField(default=True)

    objects = MyActiveManager()
    objects_inactive = MyInactiveManager()
    objects_all = models.Manager()

    class Meta:
        abstract = True
        ordering = ['-timestamp']

class MyModel(AbstractModel):
    # Define active-enabled model here

现在,我想要有一个“active”(在本例中是“timestamp”)字段的任何模型都可以从基本模型继承。当我使用MyModel.objects.all()时-我得到的所有对象都是active=True-如果我已经有很多使用对象管理器的代码,这将特别有用。如果我只想要非活动结果,我会使用MyModel.objects\u inactive.all(),如果我想要所有记录,而不管active的值是多少,我会使用MyModel.objects\u all.all()

get\u query\u set实际上是get\u QuerySet,我不确定这是如何回答这个问题的,因为它不是一个可以覆盖的“默认”过滤器,但实际上是一个对象的永久子集。我正在寻找类似的东西。为了处理上述评论(BjornW)中的问题,如果您使用.filter(active=False)创建了另一个名为MyInactiveManager的管理器,并在模型中添加了inactive_objects=MyInactiveManager(),该怎么办。是否可以使用MyModel.inactive\u objects.all()检索所有非活动对象?
class MyActiveManager(models.Manager):
    def get_queryset(self):
        return super(MyModelManager, self).get_queryset().filter(active=True)

class MyInactiveManager(models.Manager):
    def get_queryset(self):
        return super(MyModelManager, self).get_queryset().filter(active=False)

class AbstractModel(models.Model):
    timestamp = models.DateTimeField(default=datetime.utcnow)
    active = models.BooleanField(default=True)

    objects = MyActiveManager()
    objects_inactive = MyInactiveManager()
    objects_all = models.Manager()

    class Meta:
        abstract = True
        ordering = ['-timestamp']

class MyModel(AbstractModel):
    # Define active-enabled model here