普通序列化器和模型无关,只是对针对提交字段的定义。
本文定义三个序列化器:
教师序列化器,学生序列化器,教师学生序列化器。这三个序列化器都使用普通序列化器。
1 教师序列化器
在Applications/Examples/views下创建一个Teachaer.py文件。
from rest_framework import serializers from Applications.Examples.models import Teachers from rest_framework.viewsets import ModelViewSet # from rest_framework.response import Response class TeachersSerializer(serializers.Serializer): """ 【功能描述】教师序列化器 """ name = serializers.CharField(max_length=50, min_length=2, help_text='教师姓名') school_id = serializers.IntegerField(help_text='学校ID') def create(self, validated_data): teacher = Teachers.objects.create(**validated_data) return teacher def update(self, instance, validated_data): instance.name = validated_data.get('name') instance.school_id = validated_data.get('school_id') instance.save() return instance class TeachersViewSet(ModelViewSet): """ 教师视图 """ queryset = Teachers.objects.all() serializer_class = TeachersSerializer
2 学生序列化器
在Applications/Examples/views下创建一个Student.py文件。
from rest_framework import serializers from Applications.Examples.models import Students from rest_framework.viewsets import ModelViewSet # from rest_framework.response import Response class StudentsSerializer(serializers.Serializer): """ 【功能描述】学生序列化器 """ name = serializers.CharField(max_length=50, min_length=2, help_text='教师姓名') SEX_CHOICE = ( (1, '男'), (2, '女'), ) sex = serializers.ChoiceField(choices=SEX_CHOICE, required=False, help_text='性别') SUBJECT_CHOICE = ( (1, '大学语文'), (2, '微信分'), (3, '计算机组成原理'), (4, '计算机网络'), (5, '英语'), ) subject = serializers.MultipleChoiceField(choices=SUBJECT_CHOICE, help_text='所选科目') school_id = serializers.IntegerField(help_text='学校ID') def create(self, validated_data): teacher = Students.objects.create(**validated_data) return teacher def update(self, instance, validated_data): instance.name = validated_data.get('name') # request=False,表示可传可不传,故需要判定,如果传了则修改,不传则不修改。 if validated_data.get('sex'): instance.sex = validated_data.get('sex') instance.subject = validated_data.get('subject') instance.school_id = validated_data.get('school_id') instance.save() return instance class StudentsViewSet(ModelViewSet): """ 学生视图 """ queryset = Students.objects.all() serializer_class = StudentsSerializer
3 教师学生序列化器
在Applications/Examples/views下创建一个TeachaerStudent.py文件。
from rest_framework import serializers from Applications.Examples.models import TeacherAndStudent from rest_framework.viewsets import ModelViewSet # from rest_framework.response import Response class TeacherAndStudentSerializer(serializers.Serializer): """ 【功能描述】教师学生序列化器 """ teacher_id = serializers.IntegerField(help_text='教师ID') student_id = serializers.IntegerField(help_text='学生ID') def create(self, validated_data): tea_stu = TeacherAndStudent.objects.create(**validated_data) return tea_stu def update(self, instance, validated_data): instance.teacher_id = validated_data.get('teacher_id') instance.student_id = validated_data.get('student_id') instance.save() return instance class TeacherAndStudentViewSet(ModelViewSet): """ 教师学生视图 """ queryset = TeacherAndStudent.objects.all() serializer_class = TeacherAndStudentSerializer
4 路由配置
找到Examples的分路由文件urls.py,增加以上三个路由。
from django.urls import path from Applications.Examples.views import ExpHome, CoreAPI from rest_framework.routers import DefaultRouter from .views.Serializer1 import UserInfoViewSet1 from .views.Serializer2 import UserInfoViewSet2 # from .views.Serializer3 import SchoolsViewSet from .views.Schools import SchoolsViewSet from .views.Teacher import TeachersViewSet from .views.Student import StudentsViewSet from .views.TeacherStudent import TeacherAndStudentViewSet urlpatterns = [ path('ExpHome/', ExpHome.ExoHome.as_view()), path('CoreAPI/', CoreAPI.CoreAPI.as_view()), path('LoginHome/', CoreAPI.LoginHome.as_view()), # path('Teachers/', TeachersViewSet.as_view()), ] router = DefaultRouter() # 可以处理视图的路由器 router.register('UserInfo1', UserInfoViewSet1) # 向路由器中注册视图集 router.register('UserInfo2', UserInfoViewSet2) # 向路由器中注册视图集 router.register('Schools', SchoolsViewSet) # 向路由器中注册视图集 router.register('Teachers', TeachersViewSet) # 向路由器中注册视图集 router.register('Student', StudentsViewSet) # 向路由器中注册视图集 router.register('TeacherStudent', TeacherAndStudentViewSet) # 向路由器中注册视图集 urlpatterns += router.urls # 将路由器中的所以路由信息追到到django的路由列表中