本文介绍了Django-如何覆盖模型上的过滤器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我很好奇是否有实现此目的的最佳实践或推荐方法?
假设我有一个这样的模型:
class Cat(models.Model):
field1=models.CharField(...)
field2=models.CharField(...)
evil=models.BooleanField(...)
我试图实现的是,我不希望任何视图能够访问邪恶为真的Cat记录。
我是否真的需要为每个Cat.Objects.Filter调用添加.Filter(邪恶=False),或者有什么方法可以在类中这样做一次,从而使邪恶的猫永远不会出现在任何地方?
推荐答案
好的,自定义管理器可以放在这里。只要看一看docs。正如克里斯·普拉特所说,请记住,第一个管理器将成为默认管理器。
希望这会导致正确的方向。
更新(也许您可以这样做):
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()
这篇关于Django-如何覆盖模型上的过滤器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!