这一节再简化一下上一节的序列化器,用模型类序列化器自动生成序列化器,
1. ModelSerializer类
ModelSerializer
类能够让我们自动你创建一个具有对应模型类中,相对应字段的Serializer
类
ModelSerializer
类直接继承了Serializer
类,不同的是:
- 它根据
model
模型的定义,自动生成默认字段。 - 它自动生成序列化器的验证器,比如
unique_together
验证器。 - 它实现了简单的
.create()
方法和.update()
方法。
声明一个ModelSerializer
类,(用之前写好的序列化器示例,注释之前的类属性字段,修改成ModelSerializer
类)
class ProjectsModelSerializer(serializers.ModelSerializer):
name = serializers.CharField(label='用户名', max_length=128, help_text='用户名', write_only=True,
validators = [
UniqueValidator(
queryset=Projects.objects.all(),
message="该项目名称已存在")
,is_unique_user_name # 在这里调用自定义校验器
],
error_messages={
'max_length','长度不能超过10个字节'}
)
class Meta:
#1.指定参考哪一个模型类
model = Projects
#2.指定模型类都使用哪些字段,来生成序列化器
#使用全部字段
# fields = "__all__"
#使用部分字段
# fields = ('id','name','leader','tester','programer')
#指定不需要进行序列化的字段
exclude = ('publish_app','desc')
、
注意:由于对应了model
类的字段,会存在必填字段,所以fileds=__all__
和exclude
慎重使用
进入shell查看ModelSerializer类自动创建了哪些字段和验证器
2. 明确指定字段
当觉得全自动的字段不满足需求时,可以通过在ModelSerializer
类上显式声明字段,从而增加额外的字段或者重写默认的字段,就和在Serializer
类一样的。
比如:
class ProjectsModelSerializer(serializers.ModelSerializer):
#显示重写字段
name = serializers.CharField(label='用户名', max_length=128, help_text='用户名', write_only=True,
validators = [
UniqueValidator(
queryset=Projects.objects.all(),
message="该项目名称已存在")
,<