Джанго установить правильные отношения между моделями - PullRequest
2 голосов
/ 11 июля 2019

Я новичок в Django, пытаюсь выяснить, как настроить мои модели, чтобы я смог реализовать свою идею. В моем веб-приложении многие пассажиры могут забронировать много рейсов через форму.

Я хочу отобразить всех пассажиров, связанных с конкретным рейсом.

Пример: Лондон => Париж | ["Боб", "Алиса", "Билл"] , и затем я повторю этот список в моем шаблоне.

Извините, если это слишком просто для вас.

Я попытался получить отдельный рейс по id в views.py, а затем отобразил данные в шаблоне: {{london.passengers.name}}, но он возвращает None

views.py

def flights(request):

    london = Flight.objects.get(id=1)
    context = {'london': london}
    return render(request, 'flights.html', context)

models.py

# Passenger model.
class Passenger(models.Model):
    name = models.CharField(max_length=50)

    def __str__(self):
        return self.name


# Flight model.
class Flight(models.Model):
    origin = models.CharField(max_length=50)
    destination = models.CharField(max_length=50)
    duration = models.IntegerField(null=True, blank=True)

    passengers = models.ManyToManyField(Passenger)

    def __str__(self):
        return self.origin + " => " + self.destination

1 Ответ

3 голосов
/ 11 июля 2019

Список Passenger объектов, связанных с flight, можно получить с помощью:

def flights(request):
    london = Flight.objects.get(id=1)
    <b>passengers = london.passengers.all()</b>
    context = { 'london': london, 'passengers': passengers }
    return render(request, 'flights.html', context)

, а затем отобразить это в шаблоне с помощью:

{% for passenger in <b>passengers</b> %}
    {{ <b>passenger.name</b> }}
{% endfor %}

Или вы можете просто получить к нему доступ в шаблоне с помощью london.passengers.all и выполнить итерацию по нему с помощью:

{% for passenger in london.<b>passengers.all</b> %}
    {{ passenger.name }}
{% endfor %}

Лично я предпочитаю определять passengers в представлении, поскольку представление определяет , что будет отображаться , а шаблон определяет только , как будет отображаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...