0

私はdjango-votingパッケージを使用していて、そのマネージャーget_top()を機能させようとしています。私は1つの問題に遭遇しました-それは私にとって問題のように見えるジェネレーター(実際にはデータベースからアイテムを選択するためにデータを抽出する必要があります)を生成します。

グーグルとフォーラムを読んで2日間過ごした後、私が思いついた最も近い考えはこれでした: djangoの「ジェネレーターオブジェクト」とは何ですか?

これは、どのジェネレーターも次の方法でリストに変換できることを示しています。

mylist=list(myGenerator)

ジェネレータをリストに変換すると、次のエラーが発生します。

'NoneType' object has no attribute '_meta'

これが私の見解とモデルコードです:

def main(request):
    temporary = TopIssue.objects.get_top(Model=Issue, limit=10)
    temp_list = list(temporary)
    return render_to_response('main/index.html', temp_list)

from voting.managers import VoteManager
class TopIssue:
    objects = VoteManager()

何か案は?

4

1 に答える 1

0

これはサンプルコードのタイプミスかもしれませんがclass TopIssue、Djangoモデルクラスから派生したものではありません。_metaこれは、属性が見つからないというエラーメッセージが表示される理由も説明できます。

編集:私はdjango-votingに精通していませんが、ドキュメントをざっと読むと、マネージャーのget_top()関数の最初の引数はDjangoモデルである必要があります。

これは、Djangoが提供する基本クラスから継承することで実現できます。Djangoモデルについては、Djangoモデルのドキュメントで説明されています。

したがって、少なくとも、TopIssueクラスは次のように宣言する必要があります。

from django.db import models

class TopIssue(models.Model):
    # fields go here
    objects = VoteManager() # for integration with django-voting

TopIssueクラスはデータベースモデルである必要があり、get_top()関数はそのモデルの上位投票インスタンスを返すことになっています。さらに質問がある場合は、残りのコードを投稿してください(投稿したものが完全なTopIssueクラスである場合、フィールドが欠落しているなど、私には非常に奇妙に思えます)。

于 2011-02-01T18:20:34.000 に答える