在我的 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 循环中显示与每辆车相关的所有标签。当我执行类似 {{ car.tag }} 的操作时,我显然只会得到用户正在搜索的一个标签。
我正在努力如何将每辆车的所有标签传递给 View ,然后为每辆车显示它们。
有没有人知道如何做到这一点?
感谢您的帮助。
请您参考如下方法:
因此,问题在于您作为 cars 传递给模板的对象实际上是 Tag_car 对象的列表。因此,为了获得与每辆车相关的其他标签列表,您需要按照与汽车的关系,然后查询其他标签:
{% for car in cars %}
...
{% for tag in car.car.tag_set.all %}
...
{% endif %}
{% endif %}
请注意,您可能应该首先查询 Car 对象,而不是 Tag_cars。另外,您的 Tag_car 模型实际上只是多对多关系的直通表,因此无需显式创建它,您只需在 Car 模型上使用 M2M 字段即可:
tags = models.ManyToManyField(Tag)
