06.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-28 19:07  远山渡月  阅读(129)  评论(0编辑  收藏  举报