我的问题,如果没有明确设置,如何覆盖模型管理器传递默认参数的方法?
说我有一个模型条目:
class Entry(models.Model):
user = models.ForeignKey(User, verbose_name=_("user"))
text = models.CharField(max_length=200)
date = models.DateTimeField(auto_now_add=True)
deleted = models.BooleanField(default=False)
现在我想在所有get()和filter()方法中添加参数deleted=False
如果未明确设置此参数(我的意思是像Entry.objects.filter(deleted=True)
这样的东西默认参数不应该覆盖呈现一个)。
我所做的是创建EntryManager并将其设置为Entry模型中的管理器。 EntreManager中的filter()方法:
def filter(self, *args, **kwargs):
deleted = kwargs.get('deleted', False)
kwargs.update({'deleted':deleted})
return super(EntryManager, self).get(*args, **kwargs)
但它对案例deleted__in=(True, False)
不起作用,并不奇怪,但我不知道如何做到这一点。
提前致谢。
顺便说一句,我使用django 1.3.1
答案 0 :(得分:8)
您应该覆盖经理的get_query_set
方法,如here所述。在你的情况下,你可以做这样的事情:
def get_query_set(self):
return super(EntryManager, self).get_query_set().filter(deleted=False)