Как отобразить связанные экземпляры один ко многим в ListView?

Я хочу отобразить все принадлежащие экземпляры модели Report, ссылающейся на модель Module, ссылающуюся на модель Course. Поэтому я реализовал три модели, связанные через Foreignkey.

class Course(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    title = models.CharField(max_length=200, blank=True, null=True)
class Module(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    title = models.CharField(max_length=200, blank=True, null=True)
    course_id = models.ForeignKey(
        Course,
        null=True,
        on_delete=models.SET_NULL,
        related_name="modules",
        default=uuid.uuid4,
    )
class Report(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    title = models.CharField(max_length=200, blank=True, null=True)
    module_id = models.ForeignKey(
        Module,
        null=True,
        on_delete=models.SET_NULL,
        related_name="reports",
        default=uuid.uuid4,
    )

Я хочу отобразить модель Module со ссылкой на модель Course в CourseDetailView(DetailView):

Вот что я реализовал:

class CourseDetailView(DetailView):
    model = Course
    context_object_name = "course"
    template_name = "course/course_detail.html"
    fields = ["title", "description"]

    def get_context_data(self, **kwargs):
        context = super(CourseDetailView, self).get_context_data(**kwargs)
        context["courses"] = Course.objects.filter(pk=self.kwargs.get("pk"))
        return context

и я получаю экземпляр, принадлежащий самому себе.

Если я изменю context на:

context["modules"] = Module.objects.all()

и итерация по modules в course_detail.html:

    {{ course.description|safe }}

    {% for module in modules %}
    <div>
        <h2><a href="{{ module.get_absolute_url }}">{{ modules.title }}</a></h2>
    </div>
    {% endfor %}

Я получу все экземпляры Module, но мне нужны только те, которые относятся к конкретному курсу.

Я знаю, что мне нужно фильтровать context["modules"], но я не знаю, как это сделать.

Из-за того, что я хочу отображать модули в CourseDetailView я не могу получить module.pk через super(CourseDetailView, self).get_context_data(**kwargs).

Большое спасибо заранее

Насколько я понял, вам нужно что-то вроде Module.objects.filter(course_id=id), где id - это id конкретного курса. Этот набор запросов является обычным случаем. Как вы сказали в комментариях, для вашего случая необходимо: Module.objects.filter(course_id=self.object)

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