I am new to Django and I've been impressed so far by its capabilities.
I am playing with more complex models and I am have problem to use
them properly. Using Django 1.3, I am trying to write a summary page
which would present the three models below with the following
structure. In other words, a list of trips with their destinations and
activities.

- Trip 1
  - Destination 1
  - Destination 2
    - Activity 1
- Trip 2
  - Destination 1
    - Activity 2


**Models**

- Trip <-> TripDestination <-> Destination (a trip can have multiple
destinations)
- Activity -> Trip, Activity -> Destination (an activity is defined
for a trip at a specific location/destination)

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)

I am trying to write a view which would generate a page with the
structure presented above. The main problem I am having right now is
to display the activities for a specific trip and destination. As you
can see in the code below, I am building a dictionary and I doubt it
is the right thing to do. In addition, the view becomes

**View**
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,
    })

**Template**
{% 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 %}

In brief, can someone please help me to get a summary of all the trips
and activities? What's the best way to accomplish that? Is the model
correct?

Thanks!

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to