2010-05-03 73 views
42

我正在尝试打印所有会议的列表,并为每个会议打印其3个扬声器。列出ManyToManyField中的对象

在我的模板,我有:

{% if conferences %} 
     <ul> 
     {% for conference in conferences %} 
       <li>{{ conference.date }}</li> 
       {% for speakers in conference.speakers %} 
         <li>{{ conference.speakers }}</li> 
       {% endfor %} 
     {% endfor %} 
     </ul> 
{% else %} 
<p>No Conferences</p> 
{% endif %} 

在我views.py文件我有:

from django.shortcuts import render_to_response 
from youthconf.conference.models import Conference 

def manageconf(request): 
     conferences = Conference.objects.all().order_by('-date')[:5] 
     return render_to_response('conference/manageconf.html', {'conferences': conferences}) 

有一个名为会议模型。其中有一个名为类会议ManyToManyField命名扬声器

我得到的错误:

Caught an exception while rendering: 'ManyRelatedManager' object is not iterable 

这一行:{% for speakers in conference.speakers %}

回答

80

你需要调用all的许多一对多的字段来获得一个可迭代的对象。另外,下一行应该包含扬声器而不是conference.speakers

{% for speaker in conference.speakers.all %} 
     <li>{{ speaker }}</li> 
{% endfor %} 
+0

非常感谢你:)是不是只要我想! – 2010-05-03 17:02:19

+0

如果在我看来,我希望将ManyRelatedManager转换为传递查询的列表? – EduardoMaia 2017-10-18 17:43:37

12

类似的内部Python代码,这将是:

for speaker in conferenece.speakers.all(): 
    print speaker.FIELDNAME