情况
假设我具有以下模型:
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()似乎不适用于相关字段。
任何智能解决方案?
我需要对车库模型(而不是汽车)进行查询。
编辑
为澄清我的问题,我在前端有一个搜索表。用户可以搜索车库属性和/或汽车属性。
在我的结果中,我想显示有用的车库(它们与查询匹配)。对于每个车库,我想在其中显示每辆汽车,但我需要突出显示 only 与查询匹配的汽车。
鉴于上面的示例(它是简化版本),在我的模板中,我有这样的内容:
{% 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 %}
一切正常。但是我仍然需要突出显示感兴趣的汽车(例如,仅“丰田”汽车)。
希望我现在很清楚。谢谢大家。
答案 0 :(得分:0)
Django注释确实支持反向关系扩展。您需要知道适合您的关系的相关名称,建议您使用related_name
属性来定义反向调用的方式,如下所示:
class Car(models.Model):
garage = models.ForeignKey('Garage', on_delete=models.CASCADE, related_name='cars')
brand = ...
那么您的查询应该是
results = Garage.objects.filter(width__gt=30, cars__brand__icontains='Toyota')