私はDjangoの新人です。私はこれまでのところ、その能力に感銘を受けました。私はより複雑なモデルで遊んでいるし、それらを適切に使うのに問題がある。 Django 1.3を使用して、以下の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