如何在Django temp中显示筛选对象的其他条目

2024-10-01 22:25:56 发布

您现在位置:Python中文网/ 问答频道 /正文



在我的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 }}的事情时,很明显,我只得到用户正在搜索的一个标记。
如何将每辆车的所有标签传递到视图中,然后将它们显示在每辆车上,我正在苦苦挣扎。
有人知道怎么做吗?
我感谢你的帮助。你知道吗


Tags: 用户模板forsearchmodelsrequesttag标签
2条回答

所以,问题是作为cars传递给模板的对象实际上是Tag_car对象的列表。因此,为了获得与每辆车相关的其他标记的列表,您需要按照与该车的关系,然后查询其他标记:

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

但是请注意,您应该首先查询Car对象,而不是标记车。另外,您的Tagècar模型实际上只是多对多关系的直通表,因此您可以在car模型上使用M2M字段,而不是显式地创建它:

tags = models.ManyToManyField(Tag)

迭代模板中的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 %}

另请参见:Traversing foreign key related tables in django templates

相关问题 更多 >

    热门问题