我想显示所有属于模型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)