django-rest-framework-从零开始-3-序列化类ModelSerializer的使用
django-rest-framework-从零开始-3-序列化类ModelSerializer的使用
1、前言
我们之前提到创建序列化类,需要继承serializers.Serializer
类,然后映射模型类
的字段,然后重写create
方法和update
方法。这样的代码,看起来映射字段有一些重复代码,而且create
和update
方法,遇到一个模型,需要重写一次,太麻烦了。
因此,我们可以使用serializers.ModelSerializer
类代替serializers.Serializer
类
2、使用ModelSerializer
类代替Serializer
类
- 重写
student_manager/serializers.py
文件中的StudentSerializer
类
class StudentSerializer(serializers.ModelSerializer):
class Meta:
model = Student
fields = '__all__'
图示
-
查看自动生成的序列化类
在
student_manager/debug_student_serializer.py
中添加以下代码def show_serializer(): serializer = StudentSerializer() print(f"serializer:{serializer}")
图示
运行后
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)
说明:
-
通过Meta类中的model指定要序列化的模型类即可
-
完美的把模型类搬过来了,还添加了唯一属性校验器,帮助信息,标签等信息,比自己手动写序列化类方便多了,同时还重写了create方法和update方法,直接在源代码中就可以看到。