次のような (簡略化された) Django モデルがあります。
models.py
# python
class Hotel(models.Model):
name = models.Charfield()
class RoomType(models.Model):
hotel=models.ForeignKey(Hotel, related_name="roomtypes")
price=models.IntegerField() # really a currency field
class Room(models.Model):
hotel = models.ForeignKey(Hotel)
roomType = models.ForeignKey(RoomType, related_name="rooms")
class Reservation(models.Model):
room = models.ForeignKey(Room)
date = models.DateField()
したがって、テンプレートに必要な階層はHotel->RoomType->Room
、それぞれがフィルター処理された場所です。
ビュー.py
# 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})
これらのクエリはそれぞれ、ある意味で機能します。テンプレートでそれらを使用する方法がわかりません。
私はこのようなものを動作させようとしています(HTMLは簡略化されています):
template.html
{% 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 %}
上記と同様の方法でオブジェクトを処理できるように、オブジェクトをテンプレートに渡すにはどうすればよいですか?