Django: проблема между id, foreignkey и представлениями

Мне нужна помощь, чтобы понять часть django.

Я не могу понять отношения между иностранными ключами, или, скорее, отношения внутри отношений.

Позвольте мне объяснить: Я создаю приложение для путешественников.

В каждой поездке есть возможность добавить мероприятие. Эти виды деятельности уникальны для каждой поездки и поэтому связаны между собой через Foreignkey. Каждый вид деятельности также имеет уникальный адрес. Они также связаны с мероприятиями через иностранный ключ.

Я хотел бы сделать 2 вещи:

  1. Post each trip with these activities. For each of the activities, the addresses should be displayed.
  2. 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 %}

Если кто-то будет достаточно добр, чтобы помочь мне и объяснить.

Вернуться на верх