rest_framework框架入门(三)

rest_framework框架入门(三)

  • ModelSerializer类
    • 指定要包含的字段
    • 指定字段序列化(添加或覆盖默认字段)
    • 指定只读字段

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 后面是字段名字的列表或元组。

你可能感兴趣的:(django)