2012-12-06 60 views
0

所以我有一個模型,該模型是,什麼是查詢在Django一個多對多場正道

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) 

我想返回模板中的所有項目,這是我這個

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)) 

這裏views.py是如何正在做它的模板,

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

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

後這一切,這就是它返回在我的網頁,

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

我在做什麼錯了,我真的環顧四周,但一切都是徒勞的,希望你能幫助我並請多關照

回答

0

準確地說,你有一個多對多的經理。實際上你需要查詢的東西......就像all()

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

根據您的變量命名,我想你混淆的prefetch_related結果作爲一堆item秒。它實際上返回了一個Category對象的QuerySet。

因此,將它們稱爲類別會更直觀。

{% for category in categories %} 
    {% for item in category.item.all %} 
     {{ item }} {# ...etC#} 
+0

,你我的朋友是一個天才,非常感謝。 –

+0

我確實在變量aswel上工作,謝謝指出 –

0

嘗試使用:

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

然後在模板:

{% for category in categorys %} 
    {% for item in category.item.all %} 
     {{ item }} 
    {% endfor %} 
{% endfor %} 
+0

感謝哥們但這並沒有工作... –

+0

是的,你說得對,我忘了「.item.all」 - 尤里展示了它的工作具體的方式:) – szaman