0

所以我有一个模型,

class Category(SmartModel):
    item=models.ManyToManyField(Item)
    title=models.CharField(max_length=64,help_text="Title of category e.g BreakFast")
    description=models.CharField(max_length=64,help_text="Describe the category e.g the items included in the category")
    #show_description=check box if description should be displayed
    #active=check box if category is still avialable
    display_order=models.IntegerField(default=0)
    def __unicode__(self):
        return "%s %s %s %s " % (self.item,self.title, self.description, self.display_order)

如您所见,它有一个多对多字段

item=models.ManyToManyField(Item) 

我想返回模板中的所有项目,这是我的views.py

def menu(request):
    categorys= Category.objects.all()
    items= categorys.all().prefetch_related('item')
    context={
        'items':items,
        'categorys':categorys
    }
    return render_to_response('menu.html',context,context_instance=RequestContext(request))

这是我在模板中的做法,

    <ul>
{% for item in items %}
 <li>{{ item.item }}

 </li>
</ul>
{% endfor %}

毕竟这就是它在我的网页中返回的内容,

<django.db.models.fields.related.ManyRelatedManager object at 0xa298b0c>

我在做什么错,我真的环顾四周,但都是徒劳的,希望你能帮助我并提前感谢你

4

2 回答 2

0

尝试使用:

categorys= Category.objects.prefetch_related('item').all()

然后在模板中:

{% for category in categorys %}
    {% for item in category.item.all %}
        {{ item }}
    {% endfor %}
{% endfor %}
于 2012-12-06T07:44:04.253 回答
0

确切地说,您有一个多对多的经理。你需要实际查询一些东西......比如all()

{% for item in items %}
   {% for i in item.item.all %}
        {{ i }}
   {% endfor %}
{% endfor %}

根据您的变量命名,我认为您将结果混淆prefetch_related为一堆items. 它实际上是返回 Category 对象的 QuerySet。

所以称它们为类别会更直观。

{% for category in categories %}
   {% for item in category.item.all %} 
       {{ item }} {# ...etc #}
于 2012-12-06T08:15:52.507 回答