我尝试使用django .as_manager()函数将多个调用链接到自定义模型方法。
managers.py:
<MediaView fx:id="media" x="0" y="200" fitHeight="800" fitWidth="1000" visible="true">
</MediaView>
models.py
class ArticlesManager(models.Manager):
def some_filter(self):
return self.filter(something)
def other_filter(self):
return self.filter(something_else)
我希望能够致电class Article(models.Model):
# ...
objects = ArticlesManager()
如果我尝试,我会收到此错误:
&#39;查询集&#39;对象没有属性&#39; other_filter&#39;
在Article.objects.some_filter().other_filter()
中使用return self.filter(something).as_manager()
只需将错误更改为:
&#39; ManagerFromQuerySet&#39;对象没有属性&#39; other_filter&#39;
并将其作为some_filter
放入模型中,将错误更改为:
AttributeError:&#39; ProductsManager&#39;对象没有属性&#39; as_manager&#39;
我不知道应该使用as_manager方法的位置和方式,以便成功地链接模型管理器方法。
答案 0 :(得分:3)
as_manager()
是QuerySets上的方法,而不是Managers。关键是它将自定义查询集转换为管理器,以便您可以在从那里返回的查询集的根objects
属性和上调用方法。
因此,将您的定义更改为class ArticlesQuerySet(models.QuerySet)
,将对象更改为objects = ArticlesQuerySet.as_manager()
,事情就可以了。