Python中rest_framework.fields.ListField()的详细说明和示例
rest_framework.fields.ListField() 是 Django REST framework中的一个字段类,用于表示一个列表或数组。
ListField的详细说明如下:
class rest_framework.fields.ListField(child=None, *, read_only=False, write_only=False, required=None, default=empty, initial=empty, source=None, label=None, help_text=None, style=None, **kwargs)
参数:
- child:一个字段实例,用来表示列表中每个元素的类型,默认为None。可以传入其他的字段类实例,如CharField、IntegerField等。
- read_only:一个布尔值,表示此字段是否为只读。如果为True,则在序列化时,此字段的值将被忽略。默认为False。
- write_only:一个布尔值,表示此字段是否只在反序列化时才能使用。如果为True,则在序列化时,此字段将被忽略。默认为False。
- required:一个布尔值或None,表示此字段是否为必需的。如果为True,则在反序列化时,如果此字段不存在,则会产生一个验证错误。默认为None,表示依赖于父字段的required属性。
示例:
from rest_framework import serializers
class StudentSerializer(serializers.Serializer):
name = serializers.CharField(required=True)
scores = serializers.ListField(child=serializers.IntegerField(), required=True)
def create(self, validated_data):
return Student.objects.create(**validated_data)
在上面的示例中,StudentSerializer序列化器定义了两个字段:name和scores。其中,scores字段是一个ListField,它表示了学生的得分列表,并且每个得分都是一个整数。
这个示例还实现了create()方法,用于在反序列化时创建Student对象。在创建时,会使用传入的validated_data来初始化对象。
通过如下代码可以进行序列化和反序列化:
# 序列化
serializer = StudentSerializer(data={'name': 'John', 'scores': [90, 85, 95]})
serializer.is_valid()
serializer.validated_data
# 输出:{'name': 'John', 'scores': [90, 85, 95]}
# 反序列化
serializer.save()
`
上述示例中,我们创建了一个StudentSerializer实例,并传入了一个字典作为输入数据。然后,我们调用了is_valid()方法来验证输入数据是否有效,如果有效,则调用validated_data属性来获取验证后的数据。
最后,我们调用了serializer.save()方法来保存数据,它会调用StudentSerializer中的create()方法来创建Student对象。
总结:
rest_framework.fields.ListField()是用于表示列表或数组的字段类。它的参数child用于指定列表中每个元素的类型。它还提供了一些可选参数,如read_only、write_only和required,用于控制字段的行为。在序列化时,ListField将列表转换为JSON数组,在反序列化时,它将JSON数组转换为Python列表。
