2017-02-05 10 views
0

私は、django pollsアプリケーションのサンプルをビルドしています。私は選択肢のないすべての世論調査を除外したい。フィルター関連モデルdjango

return Question.objects.filter(
pub_date__lte=timezone.now() 
).exclude(
    choice_set__count=0 
).order_by('-pub_date')[:5] 

しかし、フィールドエラーでこのクエリ結果:

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

私は、クエリからモデルを関連問い合わせることができますどのように、私は、関連する選択肢のオブジェクトにアクセスする必要がありますか?

答えて

1

ChoiceモデルでQuestion外部キーにrelated_nameを設定します。 例:

class Choice(models.Model): 
    question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name='choices') 
    # other code.. 

そしてあなたのクエリはそのようなものでなければなりません:

return (Question.objects 
     .filter(pub_date__lte=timezone.now(), 
       choices__isnull=False) 
     .order_by('-pub_date')[:5]) 

:なし `__count」検索はありません。カウントに頼る場合はdocs on thisをチェックしてください。

docs:https://docs.djangoproject.com/en/1.10/ref/models/fields/#django.db.models.ForeignKey.related_name

0

あなたは、エラーが示唆するように、あなただけの関連するモデルに対してフィルタリングするにはchoice

.exclude(choice__isnull=True) 
2

を使用することができ、代わりに、クエリセットの外に関連するモデルを取得することを使用しているとき_setにのみ適用されます小文字のモデル名を使用してください - choiceが利用可能なフィールドの1つであることがわかります。

しかし、これはまだ機能しません。フィルタリングする属性は__countではありません。あなたは、アノテーションを使用することで、1つを追加することができますが、もっと簡単な方法があります:Noneと比較:

.exclude(choice=None) 
関連する問題