1
我的問題,如何重寫模型管理器的方法來傳遞默認參數,如果它沒有明確設置?get()或filter()方法中的Django模型默認參數
說我有一個模型,輸入:
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()和過濾器()方法添加參數deleted=False
如果該參數不明確設置(我的意思是像Entry.objects.filter(deleted=True)
東西默認參數不應該覆蓋所呈現的一個)。
我所做的是創建EntryManager並將其設置爲Entry模型中的管理器。
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)
工作,這不奇怪,但我不知道如何如何做到這一點的權利: 濾波器()方法EntreManager。 在此先感謝。 順便說一句我用django 1.3.1
通過這樣的情況下這樣做時,我明確地設置參數刪除過濾器而不會覆蓋=真,查詢我得到.... WHERE(」入門「。」已刪除「=假和」入門「。」已刪除「=真) – tony
@tony:你會想要有兩個管理員,通用的'對象'管理器和專門的過濾管理器(稱爲'deleted'或somesuch )。 – mipadi
現在我明白了,謝謝! – tony