Django - 如何覆盖模型上的过滤器?

时间:2012-07-23 17:51:06

标签: django django-models django-orm

我很好奇是否有最佳实践或推荐的方法来实现这一目标?

说我有这样的模型:

class Cat(models.Model):
    field1=models.CharField(...)
    field2=models.CharField(...)
    evil=models.BooleanField(...)

我想要完成的是我希望没有任何视图能够访问邪恶为真的Cat记录。

我真的需要在每个Cat.objects.filter调用中添加.filter(evil = False),还是有一些方法可以在课堂上做一次并让邪恶的猫永远不会出现在任何地方?

1 个答案:

答案 0 :(得分:8)

好的,自定义经理可以适应这里。只需查看docs即可。就像Chris Pratt所说的那样,请记住第一位经理成为默认经理。

希望这会导致正确的方向。

更新(也许你可以这样做):

from django.db import models

class EvilCategoryManager(models.Manager):
    def get_query_set(self):
        return super(EvilCategoryManager, self).get_query_set().filter(evil=False)

class Cat(models.Model):
    #.... atrributes here
    objects = models.Manager()
    no_evil_cats = EvilCategoryManager()