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

如何实现Django REST Framework嵌套关系并返回关联课程完整明细

问题根因

嵌套序列化字段lessons的定义位置错误:你将其放在了StuSerializer的Meta内部类中,DRF只会将序列化器直接定义的类属性识别为自定义序列化规则,Meta内部仅用于配置模型关联、字段列表等元信息,因此你的嵌套规则没有生效,接口默认只返回关联数据的主键。

修正代码

仅需要调整Serializers.py中StuSerializer的定义,将lessons字段移到序列化器类层级即可:

class StuSerializer(serializers.ModelSerializer):
    # 嵌套序列化字段必须定义在类层级,不可放在Meta内部
    lessons = LessonSerializer(many=True, read_only=True)

    class Meta:
        model = Student
        fields = ('first_name', 'last_name', 'information', 'lessons')

可选优化

为避免查询学生列表时出现N+1性能问题,可以调整Views.py中StuList的查询集,预加载关联的课程数据:

class StuList(generics.ListCreateAPIView):
    # 用prefetch_related预加载关联的lessons,减少数据库查询次数
    queryset = Student.objects.all().prefetch_related('lessons')
    serializer_class = StuSerializer

如果需要返回课程的全部明细字段,直接把嵌套的序列化器替换为LessonDetailSerializer即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 21:24:03