Serializer 的使用

  1. 创建serializer.py 写序列化器

# serializers.ModelSerializer 和 serializers.Serializer field参数说明

'''field参数'''
# 1.read_only
read_only = True 表示不允许用户自己上传,只能用于api的输出,序列化的时候也不用对这个数据进行验证,序列化返回是有改字段
# 2.write_only
write_only = True 表示在更新或创建实例时可以使用该字段,但在序列化返回时不包括该字段。
# 3.required: 该字段是必须的,不能为空
requires = True 反序列化(前端返回数据必须包含此字段)的时候必须提供这个字段  设置False 可以不提供
# 4.allow_null/allow_blank: 该字段允许为null/空
allow_null = True 可以为null 设置False则不能为null
# 5.label: 标签,用于对字段显示设置
# 6.help_text: 对字段进行解释的一段文本,用于提示
# 7.style: 说明字段的类型
# 8.error_messages: 字段出错时,信息提示

class UserInfoSerializer(serializers.Serializer):
   id = serializers.CharField(read_only=True)  # 普通字段,设置id为只读字段,不能修改
   username = serializers.CharField(min_length=3, max_length=20, error_messages={'required':'该字段必填'}) # 显示普通字段
   img = serializers.ImageField(required=False)
   nick_name = serializers.CharField(max_length=20)
   address = serializers.CharField(max_length=255)
   xxx = serializers.SerializerMethodField(read_only=True)  # 自定义显示(显示多对多)
   
   class Meta:
       model = User
       
       
   # 自定义显示 多对多 字段
   def get_xxx(self, row):
       '''row:传过来的是User表的对象'''
users = row.username  # 获取用户名
return users

   # 定义创建语法:ser.save()执行,就会立刻调用create方法用来创建数据
   def create(self, validated_data):
       '''validated_data: 表单或者vue请求携带的json:{"username":"zhangsan", ....}'''
# https://www.cnblogs.com/xiaonq/p/7978409.html
       return User.objects.create(**validated_data)
   
   # 定义更新方法
   def update(self, instance, validated_data):
       '''
      instance: 查询的对象
      validated_data : postman提交的json数据
      {"username":"zhangsan","password":"123456"}
      '''
  if validated_data.get('username'):
           instance.username = validated_data['username']
       instance.save()
  return value
   
   # 定义多字段验证方法
   def validate(self, attrs):
       print(attrs)
       if attrs.get("username") == 'admin':
           raise serializers.ValidationError('不能创建admin用户')
       return attrs

 

posted @ 2020-09-28 21:19  CefiLing  阅读(374)  评论(0)    收藏  举报