模型类序列化器


ModelSerializer

  • 目的:可以使用ModelSerializer根据模型类生成字段

  • 作用:

    • 1.可以参考模型自动生成字段,还可以自己编写字段

    • 提供了create方法和update方法

    • from rest_framework import serializers
      class BookModelSerializer(serializers.ModelSerializer):
      
          mobile = serializers.CharField(max_length=11,min_length=11,label='手机号')
      
          class Meta:
              model = BookInfo  # 参考模型类生成字段
              
                fields = '__all__'  #生成所有字段
          
              fields = ('id', 'btitle', 'bpub_date') #指明生成相应字段
              
              exclude = ('image',) #使用exclude可以明确排除掉     
              
              read_only_fields = ('id', 'bread', 'bcomment') #可以通过read_only_fields指明只读字段,即仅用于序列化输出的字段
              
              #给自动生成的字段添加属性(自动生成字段不满足需求时)
               extra_kwargs = {
                  'bread': {'min_value': 0, 'required': True},
                  'bcomment': {'min_value': 0, 'required': True},
              }
          
          
      
    • 视图代码:

    • ''''
      ======================模型类序列化器,测试序列化=====================================
      '''
      from book.models import BookInfo
      from book.serializers import BookModelSerializer
      
      
      # 序列化
      # 1.获取模型类对象
      book = BookInfo.objects.get(id=1)
      book.mobile = '17691394303' #因为mobile 是在序列化器中自定义的字段,数据库没有,所以要用必须指定(或者在序列化器中指定mobile字典:write_only(只写,只进行反序列化))
      
      # 2.创建序列化器对象
      serializer = BookModelSerializer(instance=book)
      
      #3.输出
      print(serializer.data)
      
    • # ======================模型类序列化器,测试反序列化 create添加数据=====================================
      from book.serializers import BookModelSerializer
      
      # 1.准被数据
      book_dict = {
          "btitle":"三国演义",
          "bpub_date":"2019-01-02",
          "bread":50,
          "bcomment":25
      }
      
      # 2.创建序列化器对象
      serializer = BookModelSerializer(data=book_dict)
      #3.校验,入库
      serializer.is_valid(raise_exception=True)
      serializer.save()
      
    • # ======================模型类序列化器,测试反序列化 update更新数据=====================================
      from book.serializers import BookModelSerializer
      from book.models import BookInfo
      # 1.准被数据
      book_dict = {
          "btitle":"红楼梦",
          "bpub_date":"2019-01-02",
          "bread":50,
          "bcomment":25
      }
      # 序列化
      # 1.获取模型类对象
      book = BookInfo.objects.get(id=1)
      
      # 2.创建序列化器对象
      serializer = BookModelSerializer(data=book_dict,instance=book)
      #3.校验,入库
      serializer.is_valid(raise_exception=True)
      serializer.save()
      
      • resizeApi.png

文章作者: Kexuan Shi
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Kexuan Shi !
评论
  目录