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+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/django-users?hl=en.
No comments:
Post a Comment