我是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