Django reverse ForeignKey возвращает None

У меня есть модели Student и Mark в разных приложениях одного проекта.

# project/study
# models.py
class Mark(models.Model):
    ...
    student = models.ForeignKey(
        "students.Student",
        on_delete=models.PROTECT,
        related_name="marks",
        related_query_name="mark",
    )


# project/students
# models.py
class Student(models.Model):
    ...

# views.py
class StudentDetailView(DetailView):
    queryset = Student.objects.prefetch_related("marks")
    template_name = "students/one_student.html"
    context_object_name = "student"


# one_student.html
...
    <p>{{ student.marks }}</p>
...

Вывод html - "study.Mark.None" В этом и заключается моя проблема.

Я пробовал сделать поле ManyToOneRel на студенте, select_related, сделать custom view func, но это не помогает. Обратный ForeignKey приводит к None. Смотрел смежные вопросы - не могу понять ответы, потому что они не имеют прямого отношения к моей ситуации.

Я ожидаю получить все оценки студента.

Что я делаю не так?

The related_name='marks'. Furthermore you here got the manager, not a queryset, use .all() [Django-doc] to get the objects:

<p>{{ student.marks.all }}</p>

Возможно, вам также следует перечислить их, например:

{% for mark in student.marks.all %}
    {{ mark.score }}
{% endfor %}

Мы можем использовать django model Prefetch следующим образом:

from django.db.models import Prefetch
queryset = Student.objects.prefetch_related(Prefetch("marks", queryset=Mark.objects.all(), to_attr="student_marks"))

В html-шаблоне необходимо выполнить итерацию по циклу следующим образом:

{% for mark in student.student_marks %}
    <p>{{ mark }}</p>
{% endfor %}
Вернуться на верх