You need to enable JavaScript to run this app. 通过Rest接口获取Student关联字段并返回JSON格式数据问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

通过Rest接口获取Student关联字段并返回JSON格式数据问题咨询

我想要获取Student用户字段,但一直找不到合适的实现方法,尝试查阅官方文档后仍然存在困惑

核心问题排查

你的代码存在两处错误导致无法正常获取关联user字段的完整内容:

  • 序列化器继承类错误:你继承的是serializers.Serializer,该类不会自动读取Meta下配置的模型、字段映射规则,只有serializers.ModelSerializer支持该特性
  • DRF默认对外键字段仅序列化返回关联对象的主键ID,如需返回user的其他字段需要额外配置序列化规则

可用解决方案

你可以根据业务需求选择以下任意一种方案修改序列化器,现有视图函数无需调整即可返回符合要求的JSON结果:

方案1:嵌套序列化器返回完整user信息

适合需要返回user表多个字段的场景

from django.conf import settings

# 先定义User表序列化器,可按需调整要返回的字段
class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = settings.AUTH_USER_MODEL
        fields = ['id', 'username', 'email', 'first_name', 'last_name']

class StudentSerializer(serializers.ModelSerializer):
    # 嵌套关联user的序列化器,read_only=True表示该字段仅用于序列化返回,不参与写入校验
    user = UserSerializer(read_only=True)
    class Meta:
        model = Student
        fields = ['id', 'user', 'name', 'course']

    def create(self, validated_data):
        Student_det = Student.objects.create(**validated_data)
        return Student_det

方案2:直接指定返回user的单个字段

如果仅需要user的某几个特定字段,不需要嵌套结构,可以用source参数直接定义:

class StudentSerializer(serializers.ModelSerializer):
    # 自定义字段名,通过source指定关联的user表字段
    username = serializers.CharField(source='user.username', read_only=True)
    user_email = serializers.EmailField(source='user.email', read_only=True)
    class Meta:
        model = Student
        fields = ['id', 'user', 'username', 'user_email', 'name', 'course']

    def create(self, validated_data):
        Student_det = Student.objects.create(**validated_data)
        return Student_det

方案3:快速自动序列化关联字段

无需自定义字段规则,直接添加depth参数即可自动序列化所有第一层关联对象的全部字段,适合快速开发场景:

class StudentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Student
        fields = ['id', 'user', 'name', 'course']
        # 数值越大序列化的关联层级越深,层级过高可能会有性能问题
        depth = 1

    def create(self, validated_data):
        Student_det = Student.objects.create(**validated_data)
        return Student_det

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 23:03:01