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
你应该重写经理的get_query_set方法,描述在这里.在你的情况下,你可以做这样的事情:
def get_query_set(self):
return super(EntryManager, self).get_query_set().filter(deleted=False)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1623 次 |
| 最近记录: |