Django模型在get()或filter()方法中的默认参数

时间:2012-01-23 18:12:47

标签: django django-models

我的问题,如果没有明确设置,如何覆盖模型管理器传递默认参数的方法?

说我有一个模型条目:

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

1 个答案:

答案 0 :(得分:8)

您应该覆盖经理的get_query_set方法,如here所述。在你的情况下,你可以做这样的事情:

def get_query_set(self):
    return super(EntryManager, self).get_query_set().filter(deleted=False)