Serializer自定义序列化

Serializer字段验证序列化

  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
      return User.objects.create(**validated_data)

  # 定义更新方法
  def update(self, instance, validated_data):
      """
      :param instance: 查询的对象
      :param validated_data: postman提交的json数据, 新数据
      :return: instance
      """
      if validated_data.get('username'):
          instance.username = validated_data['username']
      instance.save()
      return instance

  # 定义单一字段验证的方法
  def validate_name(self, value):
      if value == 'root':
          raise serializers.ValidationError('不能创建root管理员账号')
      return value

  # 定义多字段验证方法
  def validate(self, attrs):
      print(attrs)
      if attrs.get("username") == 'admin':
          raise serializers.ValidationError('不能创建admin用户')
      return attrs

posted @ 2020-09-29 07:23  ihszg  阅读(279)  评论(0编辑  收藏  举报