2



在我的 Django-Project 中,我有一个模型,看起来像这样:

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

car是 ImageFieldtag的外键,是 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 }}我显然只得到用户正在搜索的一个标签。
我正在努力如何将每辆车的所有标签传递给视图,然后为每辆车显示它们。
有人知道怎么做吗?
我感谢您的帮助。

4

2 回答 2

1

因此,问题在于您传递给模板的对象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)
于 2013-08-27T14:23:16.307 回答
0

car.tag.all在模板中迭代:

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

    <ul>
    {% for tag in car.tag.all %}
        <li>{{ tag }}</li>
    {% endfor %}
    </ul>
{% endfor %}

另请参阅:在 django 模板中遍历外键相关表

于 2013-08-27T11:18:23.817 回答