核心参数
read_only
只读字段包含在API输出中,但不应包含在创建或更新操作旗期间的输入中。任何不正确地包含在序列化器输入中的read_only字段将被忽略。
默认为False。设置为True时,可确保在序列化表示时使用该字段,但在反序列化旗舰创建或更新实例不使用该字段。
write_only
默认为False。设置为True时,可确保在更新或创建实例时可以使用该字段,但在序列化表示时不包括该字段。
required
通常,如果在反序列化期间未提供字段,则会引发错误。如果在反序列化期间不需要此字段,则设置为False。
默认为True。设置为False,还允许在序列化实例时从输出中胜率对象属性或字典键。如果键不存在,它就不会包含在输出表示中。
default
如果设置,则给出默认值,如果未提供输入值,将使用该字段。如果未设置,则默认行为是不填充该属性。
allow_null
如果把None传递给序列化器字段,通常会引发错误。如果None应被视为有效值,则将此关键字参数设置为True。
默认为False。
注意,如果没有显式的默认值,将参数设置为True意味着将序列化输出的default为null,但并不代表输入反序列化的默认值。
source
将用于填充字段的属性的名称。可以是只接受self参数的方法,如URLField(source="get_absolute_url")
,或者使用点方法来遍历属性,如EmailField(source="user.email")
。在使用点方法时,如果在属性遍历期间任何对象不存在或为空,则可能需要提供default的值。
cource="*"
:用于指示整个对象应该被传递到该字段。
validators
应用于传入字段输入的验证器函数列表,并且会引发验证错误或简单的返回。验证器函数通常引发serializers.ValidationError
,但Django内置ValidationError
可以使用。
error_message
一个错误代码为键,错误消息为值的字典
label
一个简短的文本字符串,可以用作HTML表单字段或其他描述性元素中字段的名称。
help_text
一个文本字符串,可以用作HTML表单字段或其他描述性元素中字段的描述。
initial
用于预填充HTML表单字段值的值。可以将callable传递给它:
import datetime
from rest_framework import serializers
class ExampleSerializer(serializers.Serializer):
day = serializers.DateField(initial=datetime.date.today)
style
用于控制渲染器如何渲染字段的键值对的字典。
# 使用 <input type="password">
password = serializers.CharField(
style={"input_type": "password"}
)
# 单线表单控件
color_channel = serializers.ChoiceField(
choices=["red", "bule", "grren"]
style={"base_template": "radio.html"}
)
Boolean字段
BooleanField
布尔表示。
注意,Django2.1默认serializers.BooleanField
实例将没有required,而对于之前的版本将使用required=False
选项生成默认实例。如果要手动控制此行为,需要在BooleanField上显式声明,或使用extra_kwargs
选项设置required标志。
NullBooleanField
还接受None作为有效值的布尔表示
字符串字段
CharField
文本表示。
CharField(max_length=None, min_length=None, allow_blank=False, trim_whitespace=True)
- max_length:验证输入包含的字符数不超过此数目。
- min_length:验证输入包含的字符数不小于此数目。
- allow_blank:如果设置为True,则空字符串应被视为有效值。如果设置为False,那么空字符串被认为是无效的并会引发错误,默认为False。
- trim_whitespace:设置为False,则前后空格将被删除。默认为True。
EmailField
EmailField(max_length=None, min_length=None, allow_blank=False)
文本表示,将验证有效的电子邮件地址。
RegexField
RegexField(regex, max_length=None, min_length=None, allow_blank=False)
regex可以是字符串,也可以是Python正则表达式对象。
SlugField
SlugField(max_length=50, min_length=None, allow_blank=False)
模式为[0-9a-zA-Z_-]+
的RegexField。
URLField
URLField(max_length=200, min_length=None, allow_blank=False)
根据 URL 匹配模式验证输入的 RegexField。
UUIDField
UUIDField(format='hex_verbose')
确保输入是有效 UUID 字符串的字段。to_internal_value 将返回 uuid.UUID 实例。在输出时,该字段将返回规范的连字符格式的字符串。
- format:确定uuid值的表示格式。
- hex_varbose:规范十六进制表示。
- hex:UUID的紧凑的十六进制表示。
- int:UUID的128位整数表示。
- urn:UUID的RFC 4122URN表示。
FilePathField
FilePathField(path, match=None, recursive=False, allow_files=True, allow_folders=False, required=None, **kwargs)
选择限于文件系统上某个目录中的文件名的字段。
- path:FilePathField 应该从中选择的文件系统到目录的绝对路径。
- match:一个正则表达式,作为字符串,FilePathField 将用于过滤文件名。
- recursive:指定是否应该包含路径的所有子目录。默认值是 False。
- allow_files:指定是否应该包含指定位置的文件。默认值为True。这个参数或 allow_folders 必须是True。
- allow_folders:指定是否应该包含指定位置的文件夹。默认值是 False。这个参数或 allow_files 必须是True。
IPAddressField
IPAddressField(protocol='both', unpack_ipv4=False, **options)
确保输入是有效 IPv4 或 IPv6 字符串的字段。
- protocol:限制指定协议的有效输入。可接受的值是 ‘both’ (默认),’IPv4’ 或 ‘IPv6’。匹配不区分大小写。
- unpack_ipv4:解压 IPv4 映射地址,如
:
192.0.2.1
。如果启用此选项,则该地址将解压到 192.0.2.1。默认为禁用。只能在 protocol 设置为 ‘both’ 时使用。
数字字段
IntegerField
IntegerField(max_value=None, min_value=None)
整数表示。
- max_value:验证所提供的数字不大于这个值。
- min_value:验证所提供的数字不小于这个值。
FloatField
FloatField(max_value=None, min_value=None)
浮点数表示。
- max_value:验证所提供的数字不大于这个值。
- min_value:验证所提供的数字不小于这个值。
DecimalField
DecimalField(max_digits, decimal_places, coerce_to_string=None, max_value=None, min_value=None)
十进制表示,由 Decimal 实例在 Python 中表示。
- max_digits:数字中允许的最大位数。必须是None或大于等于decimal_places的整数。
- decimal_places:以数字存储到的小数位数。
- coerce_to_string:如果用于表示应返回字符串值,则设置为True;如果应返回Decimal对象,则设置为False。默认与COERCE_DECIMAL_TO_STRING设置中的键值相同,除非重写,否则将为True。如果序列化器返回Decimal对象,则最终输出格式将由渲染器确定。请注意,设置localize 会将值强制为True。
- max_value:验证所提供的数字不大于这个值。
- min_value:验证所提供的数字不小于这个值。
- localize:设置为True以便基于当前区域启用输入和输出本地化。这也将强制coerce_to_string为True。默认为False。请注意,如果在设置文件中设置了USE_L10N = True,则会启用数据格式化。
- rounding:设置量化到配置精度时使用的舍入模式。默认为None。
日期和时间字段
DateTimeField
DateTimeField(format=api_settings.DATETIME_FORMAT, input_formats=None)
日期和时间表示。
- format:表示输出格式的字符串。
- input_formats:表示可用于解析日期的输入格式的字符串列表。
当使用ModelSerializer或HyperlinkedModelSerializer时,请注意,任何带有auto_now=True
或auto_now_add=True
的模型字段默认使用read_only=True
的序列化字段。
DateField
DateField(format=api_settings.DATE_FORMAT, input_formats=None)
日期表示。
- format:表示输出格式的字符串。
- input_formats:表示可用于解析日期的输入格式的字符串列表。
TimeField
TimeField(format=api_settings.DATE_FORMAT, input_formats=None)
时间表示。
- format:表示输出格式的字符串。
- input_formats:表示可用于解析日期的输入格式的字符串列表。
DurationField
DurationField()
持续时间表示。
选择字段
ChoiceField
ChoiceField(choices)
可以接受有限选项集中的值的字段。
choices
:有效值列表,或 (key, display_name) 元组列表。allow_blank
:如果设置为True,则空字符串应被视为有效值。如果设置为False,那么空字符串被认为是无效的并会引发验证错误。默认是False。html_cutoff
:如果设置,这将是HTML选择下拉菜单中显示的选项的最大数量。可用于确保自动生成具有非常大的可能选择的ChoiceField,而不会阻止模板的渲染。默认是 None。html_cutoff_text
:如果设置,如果在HTML选择下拉菜单中截断了最大数量的项,则将显示文本指示符。默认为”More than {count} items…”
MultipleChoiceField
MultipleChoiceField(choices)
可以接受一组零个、一个或多个值的字段,从一组有限的选选项中选择。采用一个必填的参数。
choices
:有效值列表,或 (key, display_name) 元组列表。allow_blank
:如果设置为True,则空字符串应被视为有效值。如果设置为False,那么空字符串被认为是无效的并会引发验证错误。默认是False。html_cutoff
:如果设置,这将是HTML选择下拉菜单中显示的选项的最大数量。可用于确保自动生成具有非常大的可能选择的ChoiceField,而不会阻止模板的渲染。默认是 None。html_cutoff_text
:如果设置,如果在HTML选择下拉菜单中截断了最大数量的项,则将显示文本指示符。默认为”More than {count} items…”
文字上传文字
FileField
FileField(max_length=None, allow_empty_file=False, use_url=UPLOADED_FILES_USE_URL)
文件表示。
- max_length:指定文件名的最大长度。
- allow_empty_file:指定是否允许空文件。
- use_url:如果设置为True,则 URL 字符串值将用于输出表示。如果设置为False,则文件名字符串值将用于输出表示。默认为UPLOADED_FILES_USE_URL设置键的值,除非另有设置,否则为True。
ImageField
ImageField(max_length=None, allow_empty_file=False, use_url=UPLOADED_FILES_USE_URL)
图像表示。验证上传的文件内容是否匹配已知的图像格式。
max_length
:指定文件名的最大长度。allow_empty_file
:指定是否允许空文件。use_url
:如果设置为True,则 URL 字符串值将用于输出表示。如果设置为False,则文件名字符串值将用于输出表示。默认为UPLOADED_FILES_USE_URL设置键的值,除非另有设置,否则为True。
符合字段
ListField
ListField(child=<A_FIELD_INSTANCE>, min_length=None, max_length=None)
验证对象列表的字段类。
- child:用于验证列表中的对象的字段实例。如果未提供此参数,则列表中的对象将不会被验证。
- max_value:验证所提供的数字不大于这个值。
- min_value:验证所提供的数字不小于这个值。
DictField
DictField(child=<A_FIELD_INSTANCE>)
验证对象字典的字段类。DictField 中的键始终假定为字符串值。
- child:用于验证字典中的值的字段实例。如果未提供此参数,则映射中的值将不会被验证。
JSONField
JSONField(binary)
验证传入数据结构由有效 JSON 基元组成的字段类。在它的交替二进制模式中,它将表示和验证 JSON 编码的二进制字符串。
- binary: 如果设置为True,那么该字段将输出并验证JSON编码的字符串,而不是原始数据结构。默认是False。
各种字段
ReadOnlyField
ReadOnlyField()
只返回字段的值而不进行修改的字段类。
当包含与属性相关的字段名称而不是模型字段时,默认情况下,此字段与ModelSerializer一起使用。
HiddenField
HiddenField()
不根据用户输入获取值,而是从默认值或可调用值中获取值的字段类。
ModelField
ModelField(model_field=<Django ModelField instance>)
可以绑定到任意模型字段的通用字段。ModelField类将序列化/反序列化的任务委托给其关联的模型字段。该字段可用于为自定义模型字段创建序列化器字段,而无需创建新的自定义序列化器字段。
SerializerMethodField
SerializerMethodField(method_name=None)
这是一个只读字段。它通过调用附属于序列化器类上的方法来获取其值。它可用于将任何类型的数据添加到对象的序列化表示中。
- method_name: 要调用序列化器上的方法名称。
自定义字段
如果想要创建自定义字段,需要子类化Field,并重写.to_representation()
和.to_internal_value()
方法中的一个或两个。这两种方法用于在初始数据类型和原始可序列化数据类型之间进行转换。原始数据类型通常是数字,字符串,布尔值,date/time/datetime或None。它们也可以是任何仅包含其他原始对象的列表或字典。可能支持其他类型,具体取决于您使用的渲染器。