My question, how to override model manager’s method for passing default parameter, if it doesn’t set explicitly?
Say i have a model Entry:
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)
Now somehow i want in all get() and filter() methods add parameter deleted=False if this parameter isn’t set explicitly (i mean in stuff like Entry.objects.filter(deleted=True) default parameter shouldn’t override presented one).
What i do is create EntryManager and set it as manager in Entry model.
filter() method in EntreManager:
def filter(self, *args, **kwargs):
deleted = kwargs.get('deleted', False)
kwargs.update({'deleted':deleted})
return super(EntryManager, self).get(*args, **kwargs)
But it doesn’t work for case deleted__in=(True, False), and it’s not strange but i don’t know ways how to do this right.
Thanks in advance.
By the way i use django 1.3.1
You should override the manager’s
get_query_setmethod, as described here. In your case, you could do something like this: