Je suis nouveau à Django et j'ai été impressionné jusqu'à présent par ses capacités. Je joue avec des modèles plus complexes et j'ai du mal à les utiliser correctement. En utilisant Django 1.3, j'essaye d'écrire une page de résumé qui présenterait les trois modèles ci-dessous avec la structure suivante. En d'autres termes, une liste de voyages avec leurs destinations et activités.Django et les modèles avec plusieurs clés étrangères
- voyage 1
- Destination 1
- Destination 2
- Activité 1
- voyage 2
- Destination 1
- Activité 2
modèles
- voyage < -> TripDestination < -> Destination (un voyage peut avoir plusieurs destinations)
- Activité -> Voyage, activité -> Destination (une activité est défini pour un déplacement à un emplacement/une destination spécifique)
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)
J'essaye d'écrire une vue qui génèrerait une page avec la structure présentée ci-dessus. Le principal problème que j'ai en ce moment est d'afficher les activités pour un voyage et une destination spécifiques. Comme vous pouvez le voir dans le code ci-dessous, je construis un dictionnaire et je doute que ce soit la bonne chose à faire. De plus, la vue devient
Voir
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,
})
Modèle
{% 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 %}
En bref, quelqu'un peut-il s'il vous plaît aidez-moi à obtenir un résumé de tous les voyages et activités? Quelle est la meilleure façon d'accomplir cela? Le modèle est-il correct?
Merci!
Merci digivampire! Ceci est exactement ce que je cherchais. – Martin