我怎么能覆盖,我已经考虑多到许多领域的模型管理器执行以下操作:Django的,覆盖多到许多领域的ModelManager
class TermsManager(models.Manager):
def all(self):
return super(TermsManager, self).all().filter(condition_here)
class Term(models.Model):
objects = TermsManager()
name = models.CharField(max_length=255)
class Object(models.Model):
title = models.CharField(max_length=255)
terms = models.ManyToManyField(Term, blank=True)
class Channel(Object):
class Meta:
proxy = True
我也有从继承的类TermManager称为ChannelTermManager。 如何覆盖Channel模型的“terms”字段,以便 mychannel.terms调用ChannelTermManager而不是TermManager?
这很有趣。但是,解决方案不会削减它。我的Object的实现是提供其他应用程序可以扩展的EAV模式。一个例子是从对象EAV延伸出来的Channel类。我正在过滤模型管理器中的数据,因为我需要每个类将其自己的类型定义为属性...例如,Channel类定义object_type属性='channel'。术语是定义taxonomy_type的类别的EAV。 – Maverick
现在发生的是,当django admin访问channelObj.terms时,TermManager将taxonomy_type添加到它定义其值为“Category”的查询中。但是,我希望channelObj.terms通过ChannelTerm,因为ChannelTerm将类别分类定义为'channel-category'而不是'category',就像TermManager一样。所以我无法控制django管理员调用哪个管理器来获取任何给定模型的查询集。你怎么看? – Maverick
我不是很了解你在找什么,所以我只能抛出一些想法。您可能想要查看抽象模型继承与内容类型框架的结合。或者,这可能对您有用:http://jeffelmore.org/2010/11/11/automatic-downcasting-of-inherited-models-in-django/ – acjay