2016-05-02 4 views
0

に、私は次の操作を行うためには、公式チュートリアル
https://docs.djangoproject.com/en/1.9/intro/tutorial05/#ideas-for-more-tests引数()ジャンゴ

とジャンゴを学び始める:

それは質問がそのサイト上で公開することができることを愚かです選択肢はありません。 したがって、我々の見解でこれを確認し、そのような 質問を除外することができます。私たちのテストでは、選択肢なしの質問が作成され、 テストが公開されていないことがテストされ、同様の質問 が選択肢とともに作成され、公開されていることがテストされます。

は私が, choice_set__count__gt=0filter()に追加 - ちょうど、それぞれの質問に対応する選択肢の数を確保したい0よりも大きいが、その例外

FieldError at /polls/ 
Cannot resolve keyword 'choice_set' into field. Choices are: choice, id, pub_date, question_text 

完全なコードを捨てる

class IndexView(generic.ListView): 
    template_name = 'polls/index.html' 
    context_object_name = 'latest_question_list' 

    def get_queryset(self): 
     """Return the last five published questions.""" 
     return Question.objects.filter(
      pub_date__lte=timezone.now(), choice_set__count__gt=0 
     ).order_by('-pub_date')[:5] 

(1)なぜ例外がここで起こったのだろうか?それを修正する方法はありますか?

(2)例外によると、各質問オブジェクトには選択肢があり、このフィールドはどこから来たのでしょうか?

(3)根本問題を解決するためのより良い解決策はありますか?私は質問クラスを修正することが実際の問題を解決する良い方法だと思います。あなたはこの種のもののためにannotateを使用することができますhere

+1

投稿をモデルで更新できますか? – Abhinav

+0

@AbhinavIモデル(https://bpaste.net/show/56d83049dd33) – iMath

答えて

1

から

モデル - その上で余分な集計列やフィルタを追加します。

def get_queryset(self): 
    """Return the last five published questions.""" 
    return Question.objects \ 
     .annotate(choices=Count('choice')) \ 
     .filter(pub_date__lte=timezone.now(), choices__gt=0) \ 
     .order_by('-pub_date')[:5] 

は今すぐ結果の質問オブジェクトは、choicesを持っています属性は後で使用できる選択肢の数に設定されています。

関連する問題