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