我是Django的新手,至今我的能力給我留下了深刻的印象。我正在玩更復雜的模型,我有問題正確使用它們。使用Django 1.3,我正在嘗試編寫一個摘要頁面,它將使用以下結構呈現下面的三個模型。換句話說,一個旅行目的地和活動的列表。Django和具有多個外鍵的模型
- 旅行1
- 目的地1
- 目的地2
- 活動1
- 旅行2
- 目的地1
- 活動2
模型
- 旅行< - > TripDestination < - >目標(一個行程可以有多個目的地)
- 活動 - >跳閘,活動 - >目標(一個活動是定義爲在特定位置/目的地旅行)
class Destination(models.Model):
city_name=models.CharField()
class Trip(models.Model):
departing_on=models.DateField()
returning_on=models.DateField()
destinations=models.ManyToManyField(Destination)
class Activity(models.Model):
destination=models.ForeignKey(Destination, null=False)
trip=models.ForeignKey(Trip, null=False)
我正在嘗試編寫一個視圖,該視圖將生成具有上述結構的頁面。我現在面臨的主要問題是顯示特定行程和目的地的活動。正如你在下面的代碼中看到的,我正在建立一本字典,我懷疑這是正確的做法。此外,角度的
查看
def list_trip(request, template_name = 'trip-list.html'):
trips = Trip.objects.all()
# Build a dictionary for activities -- Is this the right thing to do?
activities = Activity.objects.filter(trip__in=trips)
activities_by_trips = dict()
for activity in activities:
if activity.trip_id not in activities_by_trips:
activities_by_trips[activity.trip_id] = dict()
if activity.destination_id not in activities_by_trips[activity.trip_id]:
activities_by_trips[activity.trip_id][activity.destination_id] = []
activities_by_trips[activity.trip_id][activity.destination_id].append(activity)
return render_to_response(template_name, {
'page_title': 'List of trips',
'trips': trips,
'activities_by_trips': activities_by_trips,
})
模板
{% block content %}
{% for trip in trips %}
{{ trip.id }} - {{ trip.name }}
{% for destination in trip.destinations.all %}
{{ destination.city_name }}
** This is terrible code -- How to fix that **
{% for key, value in activities_by_trips|dict_lookup:trip.id %}
{% if value %}
{% for key_prime, value_prime in value|dict_lookup:destination.id %}
{{ value_prime.description }}
{% endfor %}
{% endif %}
{% endfor %}
{% endfor %}
{% endfor %}
{% endblock %}
簡單地說,有人可以幫我把所有的行程和活動的總結?什麼是最好的方式來實現這一目標?模型是否正確?
謝謝!
謝謝digivampire!這正是我所期待的。 – Martin 2012-02-27 22:08:03