Skip to main content
 首页 » 编程设计

python之如何在 Django 模板中显示我过滤对象的其他条目

2025年05月04日27zlslch



在我的 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)