对于django模型的任何查询,仅对有效设置为true的元素执行查询

时间:2012-07-19 12:17:41

标签: python django

由于缺乏计划,我发现自己处于这样一种情况:我必须在模型的后期阶段引入一个名为“Active”的布尔字段。想法是仅返回对Db上的任何查询都有效的元素。一种可能的方法是在模型上编辑我的所有查询以添加类似

的内容
Q(active==true)

需要进行大量更改。是否有可能使用“class meta”我可以设置排序,以便Db上的任何查询仅对有效设置为true的元素执行。

class Db(models.Model):
   url = models.TextField()
   description = models.TextField(blank=True, null=True)
   active = models.BooleanField()(initial=True)

   class Meta:
       ordering = ['-id']

2 个答案:

答案 0 :(得分:1)

您可以实施自定义默认对象管理器并根据您的条件过滤掉。

请参阅Custom managers,但请记住此Do not filter away any results in this type of manager subclass,因为django会警告覆盖默认对象管理器。

答案 1 :(得分:0)

我认为你可以为你的模型添加新的QuerySet方法snippet

from django.db import models

class QuerySetManager(models.Manager):
    def get_query_set(self):
        return self.model.QuerySet(self.model)



# Using it in a model:

from django.db.models.query import QuerySet    

class Entry(models.Model):
   ...
   objects = QuerySetManager()
   ...
   class QuerySet(QuerySet):
        def chckactive(self):            
            return self.filter(active=True)


#   Entry.objects.all().chckactive()