【问题标题】:I want to retrieve related fields as JSON format using Rest我想使用 Rest 以 JSON 格式检索相关字段
【发布时间】:2021-07-02 05:43:44
【问题描述】:

我想检索学生用户字段,但我遇到了困难 试图弄清楚如何做到这一点我尝试阅读文档但仍然 迷茫

学生序列化器

class StudentSerializer(serializers.Serializer):
    class Meta:
        model = Student
        fields = ['id', 'user', 'name', 'course']

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

序列化视图

def Student_list(request):
    if request.method == 'GET':
        stud = Student.objects.all()
        serialized = StudentSerializer(stud, many=True)
        print(serialized.data)
        return JsonResponse(serialized.data, safe=False)

学生模型

class Student (models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    name = models.CharField(max_length=255)
    course = models.CharField(max_length=255)

【问题讨论】:

  • 对什么感到困惑?什么没有被检索?您的意思是要像在 User 模型中一样显示 user 字段?
  • 我想显示用户信息,我相信我们称之为嵌套关系
  • 在这种情况下,您需要为User 模型创建另一个序列化程序,并在StudentSerializer 中使用它
  • 你好@AtifShafi 检查这个帖子它类似于你的问题stackoverflow.com/questions/67523331/…
  • @bdbd 你能发个sn-p吗

标签: django django-rest-framework relationship


【解决方案1】:

您可以查看here。我认为有关嵌套序列化程序的部分是您所需要的。

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ("id", "first_name", "last_name", ) # and you can add other fields here "email", "date_joined", etc.


class StudentSerializer(serializers.ModelSerializer):
    user = UserSerializer()
    
    class Meta:
        model = Student
        fields = ("id", "user", "name", "course", ) 

这将像这样序列化您的学生模型

{
  "id": 1,
  "user": {
    "id": 1,
    "first_name": "Example",
    "last_name": "User"
  }
  "name": "student name",
  "course": "course name"
}

【讨论】:

    猜你喜欢
    • 2013-03-06
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 2019-01-15
    • 2017-12-06
    • 2011-06-14
    • 1970-01-01
    相关资源
    最近更新 更多