【发布时间】:2019-04-23 11:37:04
【问题描述】:
情况
假设我有以下模型:
class Garage(models.Model):
width = ...
height = ...
class Car(models.Model):
garage = models.ForeignKey('Garage', on_delete=models.CASCADE)
brand = ...
现在假设我必须找到所有带有width > 30 并包含丰田汽车的车库。
然后我可以做一个这样的简单查询:
results = Garage.objects.filter(width__gt=30, car__brand__icontains='Toyota')
问题
显示按车库分组的结果我需要突出显示丰田汽车,如下所示:
GARAGE A
Volvo C30
Toyota Prius <---highlight this
Saab 93
GARAGE B
Toyota Yaris <---highlight this
GARAGE C
Fiat 500
Toyota C-HR <---highlight this
Django annotate() 似乎没有处理相关字段。
任何聪明的解决方案?
注意我需要查询 Garage 模型(不是 Car)。
编辑
为了澄清我的问题,我在前端有一个搜索表单。用户可以搜索车库属性和/或汽车属性。
在我的结果中,我想显示有用的车库(它们与查询匹配)。对于每个车库,我想显示其中的每辆汽车,但我需要仅突出显示与查询匹配的汽车。
鉴于上面的例子(这是一个简化版本),在我的模板中我有这样的东西:
{% for garage in results %}
<div>
Garage #{{garage.id}}: W {{garage.width}} x H {{garage.height}}
<div>
{% for car in results.car_set.all %}
<span> {{car.brand}} {{car.model}} ... </span>
{% endfor %}
</div>
</div>
{% endfor %}
一切正常。但我仍然需要突出显示感兴趣的汽车(例如,仅限“丰田”汽车)。
希望我现在清楚了。谢谢大家。
【问题讨论】:
-
查询
icontains='Toyota'是否也返回了 Volvo? -
“突出显示”是什么意思?你到底想做什么?
-
@Endre Both:我需要在其他车辆中识别出感兴趣的汽车!
-
也许你可以发布你的模板或一些伪代码来展示你想要做什么。您是否需要一个查询来选择具有所有相关丰田车型(但没有其他车型)的所有车库?或者还有什么?
-
@JPG 是的,查询
results正确返回了车库对象,我可以从中获取其中的所有汽车(所以,沃尔沃、丰田、菲亚特等等……)像@987654329 一样迭代@