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
相关产品推荐
相关产品推荐

