Вывод "Следуя отношениям "назад"" в шаблон

В начале этой недели я начал работать с Django, посмотрел несколько руководств и решил попробовать перевести сайт, который я сделал на PHP, на что-то более современное. В выходные я столкнулся с некоторыми проблемами и смог получить помощь по некоторым из них, но одна проблема осталась.

У меня уже есть существующая база данных с некоторой информацией, которую я хочу извлечь для отображения на сайте. Информация изменяется через базу данных, поэтому Django не нужно иметь дело ни с чем из этого - просто отображение результатов в загружаемом файле шаблона.

По сути, Django будет иметь 2 модели - по одной для каждой соответствующей таблицы базы данных.

Первая модель относится к продукции

class Bikes(models.Model):
    bikempn = models.CharField(primary_key=True, max_length=50)
    bikecategory = models.CharField(max_length=50)
    bikeyear = models.CharField(max_length=4)
    bikebrand = models.CharField(max_length=50)
    bikedesc = models.CharField(max_length=255)
    bikesize = models.CharField(max_length=50)
    bikecolour = models.CharField(max_length=255)
    bikeurl = models.CharField(max_length=255)

    class Meta:
        managed = False
        db_table = 'bikes'

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

Модель:

class Eta(models.Model):
    bikempn = models.ForeignKey(Bikes, on_delete=models.CASCADE, primary_key = True, db_column='bikempn', related_name='etas')
    eta = models.DateField()

    class Meta:
        managed = False
        db_table = 'bike_eta'

Идея этого сайта заключается в том, чтобы дать людям знать, будет ли интересующий их продукт доставлен в ближайшее время.

Я пытался придумать запрос, который отобразит всю связанную информацию, но все, что я нашел в Интернете, не сработало. Я получил некоторую помощь на этом пути, но снова уперся в стену и, честно говоря, чувствую себя глупо, если еще не разобрался в этом.

Итак, в настоящее время у меня есть запрос следующего содержания:

kidsquery = Bikes.objects.filter(bikecategory='kids').select_related('etas')

Это отфильтровывает только велосипеды, отнесенные к категории детских, и должно объединить две модели вместе.

Мой соответствующий шаблон для отображения этой информации следующий:

{% extends 'base.html' %}

{% block content %}
    {% if kidsquery %}
    <div class="table-responsive">
        <table class="table table-striped table-hover table-bordered table-sm">
            <thead class="table-dark">
                <tr>
                    <th scope="col">Year</th>
                    <th scope="col">Brand</th>
                    <th scope="col">Model</th>
                    <th scope="col">Colour</th>
                    <th scope="col">Size</th>
                    <th scope="col">Part#</th>
                    <th scope="col">ETA</th>
                </tr>
            </thead>
         
            {% for info in kidsquery %}
            <tr>
                <td>{{ info.bikeyear }}</td>
                <td>{{ info.bikebrand }}</td>
                {% if info.bikeurl %}
                <td><a href="{{ info.bikeurl }}" target="_blank">{{ info.bikedesc }}</a></td>
                {% else %}
                <td>{{ info.bikedesc }}</td>
                {% endif %}
                <td>{{ info.bikecolour }}</td>
                <td>{{ info.bikesize }}</td>
                <td>{{ info.bikempn }}</td>
                {% for arrival in info.etas.all %}
                {% if arrival is null %}
                <td>Contact Us</td>
                {% else %}
                <td>{{ arrival|date:"F Y" }}</td>
                {% endif %}
                {% endfor %}

            </tr>
            {% endfor %}
            
        </table>
    </div>
    {% endif %}
    
{% endblock %}

Кто-нибудь знает, почему я не могу добиться отображения чего-либо в последнем столбце (где должны отображаться значения дат eta (или, в противном случае, результат "Contact Us")?

Правильное решение для вытаскивания информации в шаблоне:

{% extends 'base.html' %}

{% block content %}
    {% if kidsquery %}
    <div class="table-responsive">
        <table class="table table-striped table-hover table-bordered table-sm">
            <thead class="table-dark">
                <tr>
                    <th scope="col">Year</th>
                    <th scope="col">Brand</th>
                    <th scope="col">Model</th>
                    <th scope="col">Colour</th>
                    <th scope="col">Size</th>
                    <th scope="col">Part#</th>
                    <th scope="col">ETA</th>
                </tr>
            </thead>
         
            {% for info in kidsquery %}
            <tr>
                <td>{{ info.bikeyear }}</td>
                <td>{{ info.bikebrand }}</td>
                {% if info.bikeurl %}
                <td><a href="{{ info.bikeurl }}" target="_blank">{{ info.bikedesc }}</a></td>
                {% else %}
                <td>{{ info.bikedesc }}</td>
                {% endif %}
                <td>{{ info.bikecolour }}</td>
                <td>{{ info.bikesize }}</td>
                <td>{{ info.bikempn }}</td>
                {% for arrival in info.etas.all %}
                {% if arrival.eta %}
                <td>{{ arrival.eta|date:"F Y" }} </td>
                {% else %}
                <td>Contact Us</td>
                {% endif %}
                {% endfor %}

            </tr>
            {% endfor %}
            
        </table>
    </div>
    {% endif %}
    
{% endblock %}

Поменял местами чеки и компенсировал отсутствие даты.

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