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

ton*_*ony 1 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)
Run Code Online (Sandbox Code Playgroud)

现在我想在所有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)
Run Code Online (Sandbox Code Playgroud)

但它不适用于案例deleted__in=(True, False),并不奇怪,但我不知道如何做到这一点.提前致谢.顺便说一句,我使用django 1.3.1

mip*_*adi 8

你应该重写经理的get_query_set方法,描述在这里.在你的情况下,你可以做这样的事情:

def get_query_set(self):
    return super(EntryManager, self).get_query_set().filter(deleted=False)
Run Code Online (Sandbox Code Playgroud)