Managerの__init__
メソッドでモデルのQuerySetを取得して、QuerySet結果のページ付けを設定したいとします。 __init__
メソッドでページ設定を設定したいのは、getPage
とgetNumberOfPages
などのような単純なメソッドを抽象化を簡略化するためにマネージャに単純なメソッドがたくさんあり、これらのメソッド全体でPaginator
を設定するコードを複製したくないからです。例えばDjangoのマネージャのinitメソッドでQuerySetにアクセスできません
、のカスタムArticleManager
を持っており、それは多少このようになりますArticle
モデルがあるとしましょう:super(ArticleManager, self).get_queryset()
でこのコードの
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()
4行目はAttributeError
例外を返します:
AttributeError: 'NoneType' object has no attribute '_meta'
Managerを適切に初期化するために何かをしておく必要がありますが、それが何であるか分かりません。私はDjangoのドキュメントや他のStackOverflowの質問に似たものは何も見つかりませんでした。また、私のアプローチでは何かが間違っているかもしれないと思うので、もしそうなら、もし誰かがそれを指摘してくれたら、私は感謝しています。
あなたのアプリケーションを読み込むとマネージャーが作成され、それは永遠に残っています。これは一時的な状態を持つ適切な場所ではありません。 – spectras
真。今のところ私は@Anonymousが彼の返答で言ったように、なぜ私がinitでそれを例えばプロパティにするのではなく、それを欲しがっているのか分かりません。私はPythonに費やす時間が長すぎると思う。 –