zoukankan      html  css  js  c++  java
  • DjangoRestFramework实现序列化器的字段嵌套和relate_name应用

    1. 创建一个DjangoRestframework应用App, 项目结构如下:

    screenshot_1.png

    1. models.py设计
    from django.db import models
    
    
    class Grade(models.Model):
        name = models.CharField(max_length=32)
    
    
    class Student(models.Model):
        name = models.CharField(max_length=32)
        grade = models.ForeignKey(Grade, on_delete=models.CASCADE, related_name='grade_student')
    
    1. serializers.py设计,这里最重要的是注释部分哦~
    # -*-coding:utf-8-*-
    from rest_framework import serializers
    
    from App.models import Grade, Student
    
    
    class GradeSerializerForStudent(serializers.ModelSerializer):
        class Meta:
            model = Grade
            fields = '__all__'
    
    
    class StudentSerializer(serializers.ModelSerializer):
        # student表中grade为外键
        grade = GradeSerializerForStudent()
    
        class Meta:
            model = Student
            fields = '__all__'
    
    
    class StudentSerializerForGrade(serializers.ModelSerializer):
        class Meta:
            model = Student
            fields = '__all__'
    
    
    class GradeSerializer(serializers.ModelSerializer):
        # grade表中没有外键, 使用related_name, 班级和学生是一对多关系,序列化需要指定many=True
        grade_student = StudentSerializerForGrade(many=True)
    
        class Meta:
            model = Grade
            fields = '__all__'
    
    1. urls.py设计
    # -*-coding:utf-8-*-
    from rest_framework.routers import DefaultRouter
    
    from App import views
    
    router = DefaultRouter()
    router.register(r'api/grades', views.GradeViewSet)
    router.register(r'api/students', views.StudentViewSet)
    
    1. views.py
    # -*-coding:utf-8-*-
    from rest_framework.viewsets import ModelViewSet
    
    from App.models import Grade, Student
    from App.serializers import GradeSerializer, StudentSerializer
    
    
    class GradeViewSet(ModelViewSet):
        queryset = Grade.objects.all()
        serializer_class = GradeSerializer
    
    
    class StudentViewSet(ModelViewSet):
        queryset = Student.objects.all()
        serializer_class = StudentSerializer
    
    1. 效果如下:

    screenshot.png
    screenshot_3.png

  • 相关阅读:
    GridView多行表头合并
    Android开发一 什么是3G
    SQL 日期格式 问题
    ASP.NET中TextBox控件设置ReadOnly="true"后台取不到值
    服务器维护:FTP无法连接
    Android开发之旅:应用程序基础及组件
    Failed to create the Java Virtual Machine
    Android开发七 Android中的显示单位
    Excel 数据有效性,怎么提示指定的命名区域不存在?
    Android开发三 如何安装 Android SDK 和Eclipse 插件
  • 原文地址:https://www.cnblogs.com/iread9527/p/12832395.html
Copyright © 2011-2022 走看看