2

由于缺乏计划,我发现自己不得不在模型的后期引入一个名为“Active”的布尔字段。这个想法是只返回对于 Db 上的任何查询具有活动的元素。一种可能的方法是编辑我对模型的所有查询以添加类似

Q(active==true)

这需要很多改变。是否有可能使用“类元”我可以设置排序,以便对 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']
4

2 回答 2

1

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

请参阅自定义管理器,但请记住,不要过滤掉此类管理器子类中的任何结果,因为 django 警告覆盖默认对象管理器。

于 2012-07-19T12:27:46.360 回答
0

我认为你可以为你的模型添加新的 QuerySet 方法作为这个片段

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()
于 2012-07-19T12:36:40.777 回答