在定义Model时,我们通过models.<FieldName>获取了各种不同的字段,作为数据库中表的一个列。
而在Serializer中,也需要通过serializers.<FieldName>的形式获取对应Model的字段,用来在JSON数据和Python数据类型之间进行转换,此外还可以根据Field中传入的属性进行校验、设置默认值。
一、serializers.Field中的公共参数
这里根据官方文档https://www.django-rest-framework.org/api-guide/fields/#serializer-fields总结了一些常用的公共参数:
(1)read_only:设置为True时,用于在序列化输出时使用该字段,但在反序列化创建或更新实例时不使用该字段。
(2)write_only:设置为True时,更新或创建实例时可以使用该字段,但在序列化输出时不显示该字段。
(3)required:设置为False,表示在反序列化更新和创建时,该字段不是必须的。
(4)default:反序列化时,为该字段设置一个默认值,同时包含关键字default和required是无效的,并且会引发错误。
(5)allow_null:设置为True时,表示序列化输出时,允许None作为有效值。
(6)allow_blank:设置为True时,表示在反序列化时,该字段的值可以为空。
二、serializers的Field
(1)布尔字段:BooleanField、NullBooleanField
(2)字符串字段:CharField、EmailField
(3)数字字段:IntegerField、FloatField、DecimalField
(4)日期和时间字段:DateTimeField、DateField、TimeField、DurationField
(5)文件上传字段:FileField、ImageField
(6)隐藏字段:HiddenField表示不根据用户输入取值的字段类,而是从默认值或可调用值中取值
(7)序列化方法字段:SerializerMethodField,通过调用序列化器类上的方法来获取它的值