Как отобразить значения полей, связанных с внешними ключами, в HTML с Django? - PullRequest
1 голос
/ 19 апреля 2020

Я передал список из Views.py в HTML в словарном значении. Я прошёл через поля. Есть один столбец, который является внешним ключом для другой модели. Только эта информация о модели не отображается в HTML. Как это решить? Ниже приведен код. Внешний столбец «Курс» не показывает, но другие. Скриншот прилагается здесь

Views.py

def Student_Main(request):
    objs= Students.objects.values().all()
    template_name = 'genius/students.html'
    context = {'head_title': 'Little Genius Students', 'students':objs}
    return render(request, template_name, context)

HTML

<table class="table table-hover">
                <thead class="thead-dark">
                    <tr>
                    <th scope="col">#</th>
                    <th scope="col">Name</th>
                    <th scope="col">DOB</th>
                    <th scope="col">Age</th>
                    <th scope="col">Gender</th>
                    <th scope="col">Grade</th>
                    <th scope="col">School</th>
                    <th scope="col">Course</th>
                    <th scope="col">Address</th>

                    </tr>
                </thead>
                <tbody>
                    {% for i in students %}
                    <tr>
                    <th scope="row">{{i.id}}</th>
                    <td><a href=''>{{i.name}}</a></td>
                    <td>{{i.dob}}</td>
                    <td>{{i.age}}</td>
                    <td>{{i.gender}}</td>
                    <td>{{i.grade}}</td>
                    <td>{{i.attending_school}}</td>
                    <td>{{i.course.class_name}}</td>
                    <td>{{i.address}}</td>
                    </tr>
                    {% endfor %}
                </tbody>
</table>

1 Ответ

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

Пожалуйста, сделайте , а не используйте .values() [Django -doc] , его следует использовать очень редко, например, если вы хотите сделать GROUP BY на множестве значений. Просто опуская .values(), вы получите Model объекты, которые используют ленивую загрузку, чтобы следовать ForeignKey s:

def Student_Main(request):
    # no <s>.values()</s>
    objs = Students.objects.all()
    template_name = 'genius/students.html'
    context = {'head_title': 'Little Genius Students', 'students':objs}
    return render(request, template_name, context)

Вы можете использовать .select_related(..) [Django -doc] для предотвращения проблемы N + 1 и выбора соответствующего курса в запросе:

def Student_Main(request):
    objs = Students.objects<b>.select_related('course')</b>
    template_name = 'genius/students.html'
    context = {'head_title': 'Little Genius Students', 'students':objs}
    return render(request, template_name, context)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...