字段选项
通用参数
| 参数名称 | 说明 |
|---|---|
| read_only | 表明该字段仅用于序列化输出,默认False |
| write_only | 表明该字段仅用于反序列化输入,默认False |
| required | 表明该字段在反序列化时必须输入,默认True |
| default | 反序列化时使用的默认值 |
| label | 用于HTML展示API页面时,显示的字段名称 |
| allow_null | 表明该字段是否允许传入None,默认是False |
选项参数
| 参数名称 | 作用 |
|---|---|
| max_length | 最大长度 |
| min_lenght | 最小长度 |
| allow_blank | 是否允许为空 |
| max_value | 最大值 |
| min_value | 最小值 |
在序列化器中,定义的字段选项默认是required。
class BookInfoSerializer(serializers.Serializer):
"""图书数据序列化器"""
id = serializers.IntegerField(label='ID')
name = serializers.CharField(label='名称')
pub_date = serializers.DateField(label='发布日期')
readcount = serializers.IntegerField(label='阅读量')
commentcount = serializers.IntegerField(label='评论量')
如果我们传递数据缺失一个id会怎么样呢?
>>> from book.serializers import BookInfoSerializer
>>>
>>> data = {
... 'name':'Python高级',
... 'pub_date':'2020-01-01',
... 'readcount':100,
... 'commentcount':200
... }
>>>
>>> serializer = BookInfoSerializer(data=data)
>>>
>>> serializer.is_valid(raise_exception=True)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/ubuntu/.virtualenvs/py3_django_2_2_5/lib/python3.6/site-packages/rest_framework/serializers.py", line 242, in is_valid
raise ValidationError(self.errors)
rest_framework.exceptions.ValidationError: {'id': [ErrorDetail(string='This field is required.', code='required')]}
>>>
read_only
像id这样的主键值,一般我们都是让数据库自动生成,所以一般不会传入。则需要设置为 read_only
id = serializers.IntegerField(label='ID',read_only=True)
write_only
只写入。我们在进行反序列化的时候,必须要求传入该字段。在进行序列化操作的时候不会获取到该字段的值。
password = serializers.IntegerField(label='密码',read_only=True)
read_only=True
write_only=True
id = serializers.IntegerField(label='ID',read_only=True) 表明该字段仅用于序列化输出 password = serializers.IntegerField(label='ID',write_only=True) 表明该字段仅用于反序列化输入
read__only和write__only会一起出现吗?
值不一样呢?
