rest_framework框架入门(三)
ModelSerializer类
当需要与Django模型定义紧密相关的序列化程序类时,ModelSerializer 类提供了一个快捷方式,它可以让你自动创建一个 Serializer 类对应于模型字段的字段。
ModelSerializer类与Serializer类的不同之处:
- 它将根据模型自动为你生成一组字段。
- 它将自动为序列化器生成验证器。
- 它包括简单的默认实现
.create()
和.update()
。
例子:
from rest_framework import serializers
class UserInfoSerializer(serializers.ModelSerializer):
'''创建序列化器'''
class Meta:
model = Book
fields = ('id', 'name', 'price')
# 注册Book下面那些字段
默认情况下,类上的所有模型字段都将映射到相应的序列化程序字段。
指定要包含的字段
如果只想在模型序列化程序中使用默认字段的子集,则可以使用fields或exclude选项,强烈建议使用该fields属性显式设置应序列化的所有字段。这样可以减少模型更改时无意中暴露数据的可能性。
当 fields 属性设置为特殊值时,'__all__'
表示使用模型中的所用字段。
例子:
from rest_framework import serializers
class UserInfoSerializer(serializers.ModelSerializer):
'''创建序列化器'''
class Meta:
model = Book
fields = '__all__'
exclude 属性为要从序列化程序中排除的字段列表。比如Book模型有name和price俩个字段,下面将导致最后只有name被序列化。
from rest_framework import serializers
class UserInfoSerializer(serializers.ModelSerializer):
'''创建序列化器'''
class Meta:
model = Book
exclude= ('price',)
指定字段序列化(添加或覆盖默认字段)
例子:
from rest_framework import serializers
class UserInfoSerializer(serializers.ModelSerializer):
url = serializers.CharField(source='get_absolute_url', read_only=True)
groups = serializers.PrimaryKeyRelatedField(many=True)
class Meta:
model = Book
指定只读字段
例子:
from rest_framework import serializers
class UserInfoSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ('id', 'name', 'price')
read_only_fields = ('name',)
read_only_fields 后面是字段名字的列表或元组。