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

Django筛选模型关联Lesson字段仅返回1条数据问题求助

Django模型筛选结果异常问题修复

错误原因

  • 变量名引用错误:你定义的合同查询集变量名为contracts,但筛选课程时使用的是未定义的contract变量。
  • 筛选逻辑错误:即使修正变量名,直接将Contract查询集传入id__in参数的逻辑不符合预期,Django会将Contract的主键(contract_number)作为匹配值和Lesson的主键对比,只有主键巧合相等的数据会被返回,这就是你仅得到1条数据的原因。

修复方案

推荐直接使用Django ORM跨关联查询语法,一步拿到对应学生的所有关联课程,效率更高:

def one_student(request, id):
    student = Student.objects.get(id=id)
    contracts = Contract.objects.filter(student=id)
    # 跨外键+多对多关联直接筛选
    lessons = Lesson.objects.filter(contract__student_id=id)
    print(lessons)

    content = dict(student=student,
                   contracts=contracts,
                   lessons=lessons)

    return render(request, 'studbase/student_detail.html', content)

如果你要沿用拆分查询的思路,需要先提取所有合同关联的课程ID再筛选,注意添加distinct()去重避免同一课程关联多份合同导致重复返回:

def one_student(request, id):
    student = Student.objects.get(id=id)
    contracts = Contract.objects.filter(student=id)
    # 提取所有关联的课程ID
    lesson_ids = contracts.values_list('lessons__id', flat=True).distinct()
    lessons = Lesson.objects.filter(id__in=lesson_ids)
    print(lessons)

    content = dict(student=student,
                   contracts=contracts,
                   lessons=lessons)

    return render(request, 'studbase/student_detail.html', content)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:45:03