You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django课程-章节-课时网站问题:无法获取章节下的课时

解决课程-章节-课时关联查询的问题

首先你需要修正两个核心问题:

1. CourseModel 缺少 slug 字段

你的视图里用了 course__slug=slug 过滤章节,但 CourseModel 未定义 slug 字段,这会导致章节查询直接报错。先给 CourseModel 补充该字段:

# Models.py
class CourseModel(models.Model):
    name = models.CharField(max_length=200, verbose_name="Course Name")
    category = models.ForeignKey(CourseCategoryModel, null=True, blank=True, on_delete=models.PROTECT, verbose_name="Course Category")
    slug = models.SlugField(unique=True, verbose_name="Course Slug")  # 新增slug字段

2. 课时的过滤条件写法

你已经通过 slug 获取了当前课程的 course 实例,直接用这个实例关联过滤课时即可,同时建议按章节顺序、课时顺序排序,让内容展示更规整:

# View.py
def detail(request, slug):
    course = CourseModel.objects.get(slug=slug)
    # 优化章节查询:直接用course实例过滤,比通过slug二次查询更高效
    courseSection = CourseLessonSectionModel.objects.filter(course=course).order_by('order')
    # 过滤当前课程下的所有课时,并按章节顺序、课时顺序排序
    courseLessons = CourseLessons.objects.filter(course=course).order_by('section__order', 'order')

    return render(request, "coursedetail.html", context={
        "course": course,
        "courseLessons" : courseLessons,
        "courseSection" : courseSection
    })

如果需要在模板中按章节分组展示课时,可以利用反向关联查询(默认反向关联名为courselessons_set):

<!-- coursedetail.html 模板示例 -->
{% for section in courseSection %}
  <h3>{{ section.name }}</h3>
  <ul>
    {% for lesson in section.courselessons_set.all|dictsort:"order" %}
      <li>{{ lesson.name }}</li>
    {% endfor %}
  </ul>
{% endfor %}

若要优化查询性能、避免N+1问题,可以用prefetch_related预加载章节对应的课时:

# View.py 优化版
from django.db.models import Prefetch

def detail(request, slug):
    course = CourseModel.objects.get(slug=slug)
    # 预加载章节及对应课时,减少数据库查询次数
    courseSection = CourseLessonSectionModel.objects.filter(course=course).order_by('order').prefetch_related(
        Prefetch('courselessons_set', queryset=CourseLessons.objects.order_by('order'))
    )

    return render(request, "coursedetail.html", context={
        "course": course,
        "courseSection" : courseSection
    })

内容的提问来源于stack exchange,提问作者Tolga UZUN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 10:54:14