序列化程序中的 ListField – Django REST 框架
在 Django REST Framework 中,序列化的概念是将 DB 数据转换为 javascript 可以使用的数据类型。每个序列化程序都带有一些将要处理的字段(条目)。例如,如果您有一个名为 Employee 的类,其字段为 Employee_id、Employee_name、is_admin 等。那么,您将需要 AutoField、CharField 和 BooleanField 来通过 Django 存储和操作数据。同样,序列化器也以相同的原理工作,并具有用于创建序列化器的字段。
本文围绕 Django REST Framework 中的 Serializers 中的 ListField 展开。
列表字段
ListField 基本上是一个列表字段,用于根据对象列表验证输入。
它有以下论点——
- child – 应该用于验证列表中对象的字段实例。如果未提供此参数,则不会验证列表中的对象。
- allow_empty – 指定是否允许空列表。
- min_length - 验证列表包含不少于此数量的元素。
- max_length – 验证列表包含不超过此数量的元素。
句法 -
field_name = serializers.ListField(*args, **kwargs)
例子 -
例如,要验证整数列表,可能会使用如下内容:
scores = serializers.ListField(
child=serializers.IntegerField(min_value=0, max_value=100)
)
如何在序列化程序中使用 ListField?
为了解释 ListField 的用法,让我们使用来自 – How to Create a basic API using Django Rest Framework? 的相同项目设置。
现在您的项目中有一个名为 serializers 的文件,让我们创建一个以 ListField 作为字段的序列化程序。
Python3
# import serializer from rest_framework
from rest_framework import serializers
class Geeks(object):
def __init__(self, integers):
self.integers = integers
# create a serializer
class GeeksSerializer(serializers.Serializer):
# initialize fields
integers = serializers.ListField(
child = serializers.IntegerField(min_value = 0, max_value = 100)
)
现在让我们创建一些对象并尝试序列化它们并检查它们是否真的在工作,运行,-
Python manage.py shell
现在,在 shell 中运行以下Python命令
# import everything from serializers
>>> from apis.serializers import *
# create a object of type Geeks
>>> obj = Geeks([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# serialize the object
>>> serializer = GeeksSerializer(obj)
# print serialized data
>>> serializer.data
{'integers': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}
这是终端上所有这些操作的输出 -
ListField 上的验证
请注意,这些字段的主要座右铭是进行验证,例如 ListField 仅验证要列出的数据。让我们检查一下这些验证是否有效——
# Create a dictionary and add invalid values
>>> data = {}
>>> data['integers'] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# dictionary created
>>> data
{'integers': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}
# deserialize the data
>>> serializer = GeeksSerializer(data=data)
# check if data is valid
>>> serializer.is_valid()
True
# check the errors
>>> serializer.errors
{}
这是这些命令的输出,清楚地显示整数有效 -
高级概念
验证是反序列化而不是序列化的一部分。如前所述,序列化是将已经生成的数据转换为另一种数据类型的过程,因此不需要这些默认验证。反序列化需要验证,因为数据需要保存到数据库或指定的任何其他操作。因此,如果您使用这些有效的字段序列化数据。
序列化器字段中的核心参数
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. |