django-rest-framework-从零开始-3-序列化类ModelSerializer的使用

发布时间 2023-03-22 21:11:24作者: 南风丶轻语

django-rest-framework-从零开始-3-序列化类ModelSerializer的使用

1、前言

我们之前提到创建序列化类,需要继承serializers.Serializer类,然后映射模型类的字段,然后重写create方法和update方法。这样的代码,看起来映射字段有一些重复代码,而且createupdate方法,遇到一个模型,需要重写一次,太麻烦了。

因此,我们可以使用serializers.ModelSerializer类代替serializers.Serializer

2、使用ModelSerializer类代替Serializer

  • 重写student_manager/serializers.py文件中的StudentSerializer
class StudentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Student
        fields = '__all__'

图示

image-20230316155825121

  • 查看自动生成的序列化类

    student_manager/debug_student_serializer.py中添加以下代码

    def show_serializer():
        serializer = StudentSerializer()
        print(f"serializer:{serializer}")
    

图示

image-20230316160628845

运行后

serializer:StudentSerializer():
    id = IntegerField(read_only=True)
    student_id = CharField(help_text='学号最大长度为30', label='学号', max_length=30, validators=[<UniqueValidator(queryset=Student.objects.all())>])
    student_name = CharField(help_text='学号最大长度为30', label='姓名', max_length=30)
    student_sex = ChoiceField(choices=[(1, '男'), (0, '女')], help_text='1->男,0->女', label='性别')
    student_birthday = DateField(help_text='学生生日', label='生日')
    created = DateTimeField(label='创建时间', read_only=True)
    updated = DateTimeField(label='修改时间', read_only=True)

image-20230316160249218

说明:

  • 通过Meta类中的model指定要序列化的模型类即可

  • 完美的把模型类搬过来了,还添加了唯一属性校验器,帮助信息,标签等信息,比自己手动写序列化类方便多了,同时还重写了create方法和update方法,直接在源代码中就可以看到。

github:https://github.com/rainbow-tan/learn-drf