我想在Manager的__init__
方法中获取Model的QuerySet,以便为QuerySet结果设置Pagination。我想在__init__
方法中设置分页的原因是因为我在管理器中有很多简单的方法,如getPage
和getNumberOfPages
等,以简化抽象,我不想复制代码以在所有这些方法中设置Paginator
。
例如,假设有一个Article
模型,它有一个自定义ArticleManager
,看起来有点像这样:
class ArticleManager(models.Manager):
def __init__(self):
super(ArticleManager, self).__init__()
allObjects = super(ArticleManager, self).get_queryset()
self.articlePaginator = Paginator(allObjects, 10)
class Article(models.Model):
# blah blah
# Model fields everywhere
objects = ArticleManager()
此代码的第四行super(ArticleManager, self).get_queryset()
会返回AttributeError
例外:
AttributeError: 'NoneType' object has no attribute '_meta'
我想我应该做更多的事情来正确初始化Manager,但我不确定它是什么。我没有在Django文档或其他StackOverflow问题中找到任何我想要的东西。另外我猜我的方法可能有问题,所以如果是这样的话,如果有人指出这一点,我将不胜感激。
答案 0 :(得分:1)
您正在调用父级的get_query()
方法。你没有覆盖它,所以没有意义,只需在self
上调用即可。更好的是,让这个操作变得懒惰。属性是一个选项:
class ArticleManager(models.Manager):
@property
def article_paginator(self):
return Paginator(self.get_queryset(), 10)
然后您可以通过Article.objects.article_paginator
访问它。