Django在同一个查询中得到一对多



我需要在html中显示一个带有Courses及其可靠的手风琴讲座的视图。一门课有很多讲。

class Course(models.Model):
title = models.CharField(max_length=1500)
def __str__(self):
return self.title
class Lecture(models.Model):
title = models.CharField(max_length=1500)
course = models.ForeignKey(Course, on_delete=models.CASCADE)
content = models.TextField()
def __str__(self):
return self.title

这似乎是我找到的所有例子。在进行筛选或获得第一个对象后获取关系,如下所示:

Course.objects.first().lecture_set.all()

这是第一次的所有讲座。但我需要所有的课程和所有的讲座。类似这样的东西:

Course.objects.all().lecture_set.all() or Course.objects.filter('all').lecture_set.all()

通过这种方式,我可以迭代课程,然后在每个课程上使用Course.loctures 再次迭代

有人知道实现这一目标的最佳实践吗?

您可以使用prefetch_related((在你的例子中Course.objects.all(). prefetch_related('lecture_set')所以,在那个之后,您可以迭代所有课程并获得它的讲座,而无需访问数据库。确保您将通过对象本身访问它,如:

{% for course in courses_list %}
{% for lecture in course.lecture_set.all() %}

有一个好的库可以检查每个请求的详细信息,比如每个请求的数据库连接数。因此,您可以优化代码。

希望我痊愈了。

最新更新