Я новичок в Django и до сих пор впечатлен его возможностями. Я играю с более сложными моделями, и у меня проблемы с их правильным использованием. Используя Django 1.3, я пытаюсь написать сводную страницу, которая представила бы три модели ниже со следующей структурой. Другими словами, список поездок с указанием их направлений и занятий.
Модели
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 %}
Вкратце, может ли кто-нибудь помочь мне получить сводку обо всех поездках и мероприятиях? Как лучше всего этого добиться? Модель правильная?
Спасибо!