2013-08-27 60 views
2



在我的Django的項目我有一個模型,看起來像:如何在Django模板中顯示我過濾的對象的其他條目

class Tag_car(models.Model): 
    car = models.ForeignKey(Car) 
    tag = models.ForeignKey(Tag) 

car是的ImageField和tag的外鍵是TextField的外鍵。

每輛車都只有一個標籤。 現在用戶應該能夠通過標籤搜索特定的汽車。我這樣做一樣,在我的觀點:

… 
search = request.POST.get('search') 
cars = Tag_car.objects.filter(tag=search) 
… 
return render_to_response(page,context_instance=RequestContext(request, {'cars': cars})) 

而在我的模板,我顯示了所有汽車則這樣的:

{% for car in cars %} 
    <img src="{{ MEDIA_URL }}{{ car.car }}"> 
{% endfor %} 

這一切工作正常。
但是現在我還想在模板的for-loop中顯示與每輛車相關的所有標籤。當我做一些類似{{ car.tag }}的事情時,我明顯地得到了用戶正在搜索的一個標籤。
我正在努力如何將每輛車的所有標籤都傳遞給視圖,然後爲每輛車顯示它們。
有沒有人有一個想法如何做到這一點?
我感謝您的幫助。

回答

1

所以,問題是,你傳遞給模板cars的對象實際上是Tag_car對象的列表。因此,爲了得到與每個汽車等標籤的列表中,您需要按照汽車的關係,然後查詢其他標籤:

{% for car in cars %} 
    ... 
    {% for tag in car.car.tag_set.all %} 
     ... 
    {% endif %} 
{% endif %} 

注意,雖然你也許應該查詢該汽車對象第一名,而不是Tag_cars。此外,您的Tag_car模型實際上只是多對多關係的一張桌子,所以您可以在Car模型上使用M2M字段,而不是明確地創建該模型:

tags = models.ManyToManyField(Tag) 
+0

也通過使用'car.car.tag_set.all' for沒有輸入迴路。我擔心更改模型,因爲應用程序已在服務器上進行高效使用。 – almey

+0

真的,你需要通過shell自己調查一下。使用'car = Tag_car.objects.filter(tag ='mytag')[0]'然後查看'car'和'car.car'的屬性。 –

+0

謝謝。在我的'Car'-Model中,我不得不添加'tags = models.ManyToManyField(Tag,through ='Tag_car')'。然後,我可以在for循環中用'car.car.tags.all'訪問標籤。 – almey

0

遍歷模板car.tag.all

另見:Traversing foreign key related tables in django templates

+0

剛剛嘗試過。不幸的是,第二個for循環根本沒有被輸入。可能是因爲我只從我的視圖中通過了'Tag_car.objects.filter(tag = search)',而不是'Tag_car.objects.all()'! – almey

+0

@ user2721277您是否可以嘗試傳遞'Tag_car.objects.all()',僅用於測試目的? – alecxe

+1

@ user2721277也請嘗試'car.tag_set.all'而不是'car.tag.all'。 – alecxe

相關問題