序列化器字段中的核心参数——Django REST Framework
Django 中的序列化器字段与 Django 表单字段和 Django 模型字段相同,因此需要某些参数来操作这些字段的行为。在 Django REST Framework 中,序列化的概念是将 DB 数据转换为 javascript 可以使用的数据类型。本文围绕序列化器字段可用于有效操作数据进出序列化器的各种参数展开。
序列化器字段中的核心参数
.math-table { 边框折叠:折叠;宽度:100%; } .math-table td { 边框:1px 实心 #5fb962;文本对齐:左!重要;填充:8px; } .math-table th { 边框:1px 实心 #5fb962;填充:8px; } .math-table tr>th{ 背景颜色:#c6ebd9;垂直对齐:中间; } .math-table tr:nth-child(odd) { background-color: #ffffff; }Argument Description read_only Set this to True to ensure that the field is used when serializing a representation, but is not used when creating or updating an instance during deserialization write_only Set this to True to ensure that the field may be used when updating or creating an instance, but is not included when serializing the representation. required Setting this to False also allows the object attribute or dictionary key to be omitted from output when serializing the instance. default If set, this gives the default value that will be used for the field if no input value is supplied. allow_null Normally an error will be raised if None is passed to a serializer field. Set this keyword argument to True if None should be considered a valid value. source The name of the attribute that will be used to populate the field. validators A list of validator functions which should be applied to the incoming field input, and which either raise a validation error or simply return. error_messages A dictionary of error codes to error messages. label A short text string that may be used as the name of the field in HTML form fields or other descriptive elements. help_text A text string that may be used as a description of the field in HTML form fields or other descriptive elements. initial A value that should be used for pre-populating the value of HTML form fields.
只读
只读字段包含在 API 输出中,但不应包含在创建或更新操作期间的输入中。任何错误地包含在序列化程序输入中的“read_only”字段都将被忽略。
将此设置为 True 以确保在序列化表示时使用该字段,但在反序列化期间创建或更新实例时不使用该字段。
默认为假
句法 -
read_only = True/False
例子 -
field_name = serializers.CharField(read_only = True)
只写
将此设置为 True 以确保在更新或创建实例时可以使用该字段,但在序列化表示时不包括在内。
默认为假
句法 -
write_only = True/False
例子 -
field_name = serializers.CharField(write_only = True)
必需的
如果在反序列化期间未提供字段,通常会引发错误。如果在反序列化期间不需要此字段,则设置为 false。
将此设置为 False 还允许在序列化实例时从输出中省略对象属性或字典键。如果密钥不存在,它将根本不包含在输出表示中。
默认为真。
句法 -
write_only = True/False
例子 -
field_name = serializers.CharField(write_only = True)
默认
如果设置,如果没有提供输入值,这将给出将用于该字段的默认值。如果未设置,则默认行为是根本不填充属性。
在部分更新操作期间不应用默认值。在部分更新的情况下,只有传入数据中提供的字段才会返回经过验证的值。
可以设置为函数或其他可调用对象,在这种情况下,每次使用时都会评估该值。调用时,它将不接收任何参数。如果可调用对象具有 requires_context = True 属性,则序列化器字段将作为参数传递。
例如:
class CurrentUserDefault:
"""
May be applied as a `default=...` value on a serializer field.
Returns the current user.
"""
requires_context = True
def __call__(self, serializer_field):
return serializer_field.context['request'].user
When serializing the instance, default will be used if the o
实例中不存在对象属性或字典键。
请注意,设置默认值意味着该字段不是必需的。同时包含默认和必需的关键字参数是无效的,并且会引发错误。
句法 -
default = value
例子 -
field_name = serializers.CharField(default = "Naveen")
允许为空
如果将 None 传递给序列化器字段,通常会引发错误。如果 None 应被视为有效值,则将此关键字参数设置为 True。
请注意,如果没有明确的默认值,将此参数设置为 True 将意味着序列化输出的默认值为 null,但并不意味着输入反序列化的默认值。
默认为假
句法 -
allow_null = True/False
例子 -
field_name = serializers.CharField(allow_null = True)
来源
将用于填充字段的属性的名称。可能是只接受一个 self 参数的方法,例如 URLField(source='get_absolute_url'),也可能使用点符号来遍历属性,例如 EmailField(source='user.email')。使用点分符号序列化字段时,如果在属性遍历期间任何对象不存在或为空,则可能需要提供默认值。
值 source='*' 有一个特殊的含义,用来表示应该将整个对象传递给字段。这对于创建嵌套表示或需要访问完整对象以确定输出表示的字段很有用。
默认为字段的名称。
句法 -
source = value
例子 -
field_name = serializers.CharField(source = "user.name")
验证者
应应用于传入字段输入的验证器函数列表,它们要么引发验证错误,要么简单地返回。验证器函数通常应该引发 serializers.ValidationError,但 Django 的内置 ValidationError 也支持与 Django 代码库或第三方 Django 包中定义的验证器兼容。
句法 -
validators = [function_1, function_2]
例子 -
field_name = serializers.CharField(validations = [validate_name, validate_username])
错误消息
错误消息的错误代码字典。它的工作方式与 error_messages 相同——Django 内置字段验证
句法 -
error_messages = {'argument':'message'}
例子 -
field_name = serializers.CharField(error_messages = {"unique":"Data should be unique"})
标签
可用作 HTML 表单字段或其他描述性元素中的字段名称的短文本字符串。它与标签相同 - Django 表单字段验证
句法 -
label = value
例子 -
field_name = serializers.CharField(label = "Name")
帮助文本
可用作 HTML 表单字段或其他描述性元素中的字段描述的文本字符串。它与 help_text 相同 - Django 内置字段验证。
句法 -
help_text = value
例子 -
field_name = serializers.CharField(help_text = "Enter only 10 characters")
最初的
应该用于预填充 HTML 表单字段的值的值。它与初始相同 - Django 表单字段验证。你可以传递一个 callable 给它,就像你可以对任何常规 Django 字段做的那样:
句法 -
initial = value
例子 -
import datetime
from rest_framework import serializers
class ExampleSerializer(serializers.Serializer):
day = serializers.DateField(initial=datetime.date.today)