尝试这样做:
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
这两个字段都是多对多的,那么如何做到这一点?
尝试这样做:
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
这两个字段都是多对多的,那么如何做到这一点?
尝试
matches = [val for val in Store.attribute_answers.all() if val in WishList.attribute_answers.all()]
注意末尾的括号WishList.attribute_answers.all()
。添加括号会调用该all
函数以返回一个可迭代对象。
如果您包含括号,您的意思是“给我商店答案中的所有值,只要该值也在愿望清单答案中”。如果没有括号,您将要求商店答案中的所有值也在all
函数中,这是没有意义的。all 函数不是可迭代的(它是一个返回可迭代的函数)
听起来你正在寻找类似的东西
Store.attribute_answers.all()
如果您在模板中执行此操作:
{% 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 %}
all()
对于在TL;DR等问题中发现阅读代码的每个人
代替query_set.many_to_many
你应该使用
query_set.many_to_many.all()
每当出现这个问题时,我都会不断提出这个问题。特别是在尝试实际迭代函数中的多态时。
作为模板,您可以:
array = many_to_many.all()
for x in many_to_many:
function here
这里的 busines_type 是 profile 模型中的 foreign_key
pro = Profile.object.filter(user=myuser).first()
business_type = pro.business_type.all()
if business_type:
b_type = ''
for b in business_type:
b_type += str(b.type)+' '
a = b_type