自定义模型管理器的链接方法

时间:2015-11-29 21:27:30

标签: python django

我尝试使用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方法的位置和方式,以便成功地链接模型管理器方法。

1 个答案:

答案 0 :(得分:3)

as_manager()是QuerySets上的方法,而不是Managers。关键是它将自定义查询集转换为管理器,以便您可以在从那里返回的查询集的根objects属性上调用方法。

因此,将您的定义更改为class ArticlesQuerySet(models.QuerySet),将对象更改为objects = ArticlesQuerySet.as_manager(),事情就可以了。