Показывать только последнюю запись в html - PullRequest
0 голосов
/ 25 апреля 2020

Я новенький для Django. Я хочу перечислить всех пассажиров на каждом рейсе. Однако на дисплее отображается только пассажир последнего рейса. Я думаю, что это может быть что-то не так в моем html. Мой код в файле view.py выглядит следующим образом: -

def list  (request):
flights = Flight.objects.all()
for flight in flights: 
    for flight in flights: 
        passengers = Flight.objects.get(pk=flight.id).passengers.all()
        for passenger in passengers:
             context = {
            "flights": flights,
             "flight":flight,
            "passengers": passengers,
            "passenger":passenger,     }

Мой HTML указан следующим образом: -

{% block body %}
<h1>Flights</h1> <div class = "list">
{% for flight in flights %}
    <li>
        <a href="{% url 'flight' flight.id %}">
            Flight #{{ flight.id }}: {{ flight.origin }} to {{ flight.destination }}
        </a>
   <ul>
    <li>Flight Number: {{ flight.id }}</li>
    <li>Origin: {{ flight.origin }}</li>
    <li>Destination:  {{ flight.destination }}</li>
    <li>
        {% for passenger in passengers %}    <---  I think it should have some instruction to point to flight 
        Passengers:
        <ul>
        <li> {{passenger}} </li>
            {% empty %}
        <li>No passengers</li>
    {% endfor %}
        </ul>
    </li>
    </ul>
</li>{% endfor %}</div>{% endblock %}

Отображается только последний пассажир рейса. Может ли кто-нибудь помочь мне рассмотреть, если таковые отсутствуют? Большое спасибо за вашу помощь Результаты показывают только последний рейс пассажира

1 Ответ

0 голосов
/ 25 апреля 2020

Есть несколько проблем с вашей точки зрения.

  1. Вы * oop в два раза больше своих рейсов, но это может быть проблемой с пастой?
  2. Ваше решение вполне производительное тяжелый, так как для каждого полета происходят два запроса. Ваш рейс снова возвращается с .get, и вы получаете пассажиров. С 1 рейсом вы выполняете 3 запроса, но с 100 рейсами вы выполняете 201 запрос.
  3. Вы перезаписываете свой контекст.
def list_passengers(request):
    flights = Flight.objects.all().prefetch_related('passengers')

    context = {
        "flights": flights
    }

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

Теперь нам нужно обновить шаблон для работы с вашим новым контекстом.

{% block body %}
<h1>Flights</h1> 
<div class = "list">
{% for flight in flights %}
    <li>
        <a href="{% url 'flight' flight.id %}">
            Flight #{{ flight.id }}: {{ flight.origin }} to {{ flight.destination }}
        </a>
   <ul>
    <li>Flight Number: {{ flight.id }}</li>
    <li>Origin: {{ flight.origin }}</li>
    <li>Destination:  {{ flight.destination }}</li>
    <li>
        Passengers:
        <ul>
        {% for passenger in flight.passengers.all %}     
            <li> {{passenger}} </li>
        {% empty %}
            <li>No passengers</li>
        {% endfor %}
        </ul>
    </li>
    </ul>
</li>
{% endfor %}
</ul>
</div>
{% endblock %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...