[英]How to get related objects from one to many relationship for display in ListView and be able to filter?
[英]How to display related One to Many Instances in ListView?
我想顯示所有屬於模型Report
的實例 Referenced to Module
referenced to model Course
。 因此,我通過外鍵實現了三個相關模型。
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) 這樣的 smth,其中 id 是特定課程的 id。 這個查詢集是一個常見的情況。 正如您在對您的案例的評論中所說: Module.objects.filter(course_id=self.object)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.