有没有办法将Django manyratedmanager a.k.a.ManyToManyField子类化?在
目标是在调用ManyRelatedManager
时使用deleted=None
来预过滤所有相关模型。如果deleted=None
,则它是一个有效的Model
。在
到目前为止,这是代码,但似乎不起作用。在
class ExcludeDeletedManyToManyField(models.ManyToManyField):
def get_queryset(self):
qs = super(ExcludeDeletedManyToManyField, self).get_queryset()
return qs.filter(deleted__isnull=True)
class SelfRefrencingModel(models.Model):
children = ExcludeDeletedManyToManyField('self', blank=True,
symmetrical=False, related_name='parents')
您可以创建
SelfRefrencingModel
的proxy model,并覆盖默认的manager。然后在ManyToManyField
中使用此代理模型。在子类化
ManyToManyField
对您没有帮助,因为对于结果查询集,ManyRelatedManger
负责。在代理模型方法:
这种方法需要注意的是,django现在需要
AProxy
个实例作为children
字段。在所以,也许更好的可读性和可维护性方法是在
^{pr2}$__init__
中添加另一个属性。在如果您打算在Django-Admin或
ModelForm
中使用它,则不需要将ManyToManyField
子类化。参见django documentation注意:如果}。它不能是
deleted
是BooleanField
,则必须是True
或{None
/NULL
。在beezz的使用代理模型的想法也是一个好主意。在
我有时会定制默认管理器 ^{pr2}$默认情况下,
deleted
对象将被隐藏,但如果在查询集中需要它们,可以使用_objects
。在这是我的解决方案。@beezz,使用代理模型来完成此操作可能是正确的,但在此模式中,我以前从未使用过代理模型,因此我解决此问题的方法如下:
相关问题 更多 >
编程相关推荐