Django: проблема между id, foreignkey и представлениями
Мне нужна помощь, чтобы понять часть django.
Я не могу понять отношения между иностранными ключами, или, скорее, отношения внутри отношений.
Позвольте мне объяснить: Я создаю приложение для путешественников.
В каждой поездке есть возможность добавить мероприятие. Эти виды деятельности уникальны для каждой поездки и поэтому связаны между собой через Foreignkey. Каждый вид деятельности также имеет уникальный адрес. Они также связаны с мероприятиями через иностранный ключ.
Я хотел бы сделать 2 вещи:
- Post each trip with these activities. For each of the activities, the addresses should be displayed.
- Display the lists of trips, showing the country where the activities take place "country" of "addresse" of "activities".
# models.py
class Adresse(models.Model):
libelle = models.fields.CharField(max_length=100)
numero = models.fields.IntegerField(null=True)
street = models.fields.CharField(max_length=100)
code = models.fields.IntegerField(null=True)
city = models.fields.CharField(max_length=100, null=True)
country = models.ForeignKey(Country, null=True, blank=True, on_delete=models.SET_NULL)
def __str__(self):
return f'{self.libelle}'
class Trip(models.Model):
title = models.fields.CharField(max_length=100)
traveller = models.ManyToManyField(Character)
date_start = models.DateField(default=date.today)
date_end = models.DateField(default=date.today)
def __str__(self):
return f'{self.title}'
class Activity(models.Model):
TRANSPORT = 'TRANSPORT'
HEBERGEMENT = 'Hébergement'
RESTAURATION = 'RESTAURATION'
LOISIR = 'LOISIR'
ROLE_CHOICES = (
(TRANSPORT, 'Transport'),
(HEBERGEMENT, 'Hébergement'),
(RESTAURATION, 'Restauration'),
(LOISIR, 'Loisir'),
)
category = models.CharField(max_length=30, choices=ROLE_CHOICES)
trip = models.ForeignKey(Trip, null=True, blank=True, on_delete=models.SET_NULL)
adresse = models.ForeignKey(Adresse, null=True, blank=True, on_delete=models.SET_NULL)
date_start = models.DateField(default=date.today)
date_end = models.DateField(default=date.today)
class Meta:
verbose_name_plural = "Activities"
# views.py
@login_required
def travel_list(request):
travels = Trip.objects.all()
template = 'travel/travel_list.html'
context = {'travels' : travels}
return render(request, template, context)
@login_required
def travel_detail(request, travel_id):
travel = get_object_or_404(Trip, id=travel_id)
activities = Activity.objects.filter(trip_id=travel_id)
adresses = Adresse.objects.get(id=activities.adresse)
travellers = travel.traveller.all().order_by("last_name", "first_name")
template = 'travel/travel_detail.html'
context = {
'travel': travel,
'activities' : activities,
'travellers' : travellers,
'adresses' : adresses,
}
return render(request, template, context)
{% extends 'base.html' %}
{% block content %}
<h2>{{travel.title}}</h2>
{% if activities %}
<h3>Activités :</h3>
<table>
{% for activity in activities %}
{% for adresse in adresses %}
<tr>
<td>{{activity.category}}</td>
<td>{{adresse.libelle}} - {{adresse.street}} {{adresse.numero}} {{adresse.code}} {{adresse.city}}</td>
<td>{{activity.date_start}}</td>
<td>{{activity.date_end}}</td>
</tr>
{% endfor %}
{% endfor %}
</table>
{% else %}
{% endif %}
{% if travellers %}
<h3>Voyageurs :</h3>
{% for traveller in travellers %}
<p><a href="{% url 'character-detail' traveller.id %}">{{ traveller.first_name }} {{ traveller.last_name }}</a></p>
{% endfor %}
{% else %}
{% endif %}
{% endblock %}
Если кто-то будет достаточно добр, чтобы помочь мне и объяснить.