Python Django中的复滤波
我有一个简化的Django模型,类似于以下内容: models.py 因此,我的模板需要的层次结构是Hotel->RoomType->Room,每个模板都经过过滤 views.py 这些查询中的每一个都在某种程度上起作用。我还没有弄明白如何在模板中使用它们 我正在尝试简化如下工作HTML: template.htmlPython Django中的复滤波,python,django,django-templates,django-views,Python,Django,Django Templates,Django Views,我有一个简化的Django模型,类似于以下内容: models.py 因此,我的模板需要的层次结构是Hotel->RoomType->Room,每个模板都经过过滤 views.py 这些查询中的每一个都在某种程度上起作用。我还没有弄明白如何在模板中使用它们 我正在尝试简化如下工作HTML: template.html 如何将对象传递到模板,以便以类似于上述的方式处理它们?您的第一个代码片段可以简化为仅此一个调用: hotels = Hotel.objects.filter(roomtype__r
如何将对象传递到模板,以便以类似于上述的方式处理它们?您的第一个代码片段可以简化为仅此一个调用:
hotels = Hotel.objects.filter(roomtype__room=<whatever your criteria are>)
您不能在模板中执行此查询,但可以将hotels queryset传递到模板中进行渲染。这将为每个房间生成hotels in hotels。如果一家酒店有4间符合标准的房间,我会得到4份该酒店的复印件。我似乎找不到迭代哪个对象来访问每个酒店中过滤的RoomType。
# only get available rooms that meet the user supplied criteria in q
q = Q() # complex query building omitted
rooms = Room.objects.filter(q)
# only get roomtypes that have rooms meeting criteria in q
roomTypesValues = rooms.values_list('roomType', flat=True)
roomTypes = RoomType.objects.filter(pk__in=list(roomTypesValues))
# only get hotels that have rooms meeting criteria in q
hotelsValues = roomTypes.values_list('hotel', flat=True)
hotels = Hotel.objects.filter(pk__in=list(hotelsValues))
c=RequestContext(request, {'hotels': hotels})
{% for hotel in hotels %}
<h1>{{hotel.name}}</h1>
<ul>
{% for roomtype in hotel.roomtypes %}
<li>
{{roomtype.name]}, {{roomtype.price}}
{% for room in roomtype.rooms %}
<!-- not really needed for this -->
{% endfor %}
</li>
{% endfor %}
</ul>
{% endfor %}
hotels = Hotel.objects.filter(roomtype__room=<whatever your criteria are>)