118

これをしようとしています:

wishList = WishList.objects.get(pk=20)
matches = [val for val in Store.attribute_answers.all() if val in wishList.attribute_answers]

そして、これを手に入れて...

'ManyRelatedManager' object is not iterable

どちらのフィールドも多対多なので、どうすればよいでしょうか?

4

6 に答える 6

131

試す

matches = [val for val in Store.attribute_answers.all() if val in WishList.attribute_answers.all()]

の最後の括弧に注意してくださいWishList.attribute_answers.all()。括弧を追加すると、all関数が呼び出されて iterable が返されます。

括弧を含めると、「その値がウィッシュリストの回答にもある限り、店の回答のすべての値を教えてください」と言っています. 括弧がないと、関数にもあるストアの回答からすべての値を求めていますがall、これは意味がありません。all 関数はイテラブルではありません (イテラブルを返す関数です)

于 2013-02-17T12:17:15.123 に答える
63

あなたが何かを探しているように聞こえます

Store.attribute_answers.all()
于 2013-02-17T12:16:29.343 に答える
49

テンプレートでこれを行う場合:

{% for room in study.room_choice.all %}
  {{ room }}
  {% empty %}
  empty list!
{% endfor %}

アップデート

スルー テーブルがある場合は、そのテーブル内の要素にアクセスできます (詳しくはこちらを参照)。 (スルー テーブル名を小文字で使用し、接尾辞 _set を付けます):

{% for roominfo in participant.roomchoicethru_set.all %}
  {{ roominfo.room}} {{ roominfo.telnumber}}
{% endfor %}
于 2019-01-18T10:58:21.787 に答える