如何在ListView中显示相关的一个到多个实例?



我想显示所有属于模型Report引用模型Module引用模型Course的实例。因此,我实现了三个通过Foreignkey相关的model。

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,
)

我想在CourseDetailView(DetailView):中显示引用Course的模型Module

下面是我实现的:

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()
course_detail.html中遍历modules:
{{ 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中显示模块,我无法通过super(CourseDetailView, self).get_context_data(**kwargs)获得module.pk

提前致谢

据我所知,您需要像Module.objects.filter(course_id=id)这样的东西,其中id是特定课程的id。此查询集是一种常见情况。正如您在评论中所说,您的情况需要:Module.objects.filter(course_id=self.object)

相关内容

  • 没有找到相关文章

最新更新