from rest_framework import serializers
from user.models import User
Serializer ,ModelSerializer
def address_validate(data):
# data:是用户提交的地址这个字段的数据(河南省 郑州市)
# 独立校验器
# raise serializers.ValidationError(‘请填写实际地址‘)
# 有错就抛出异常 # 没错就返回数据
return data
class UserSerializer(serializers.ModelSerializer):
# 1.独立校验器:重新设定字段, 替换掉模型中的设定, 重新设定地址的长度为5
# address_validate是自定义的数据校验1函1数1
address=serializers.CharField(max_length=255,min_length=5,validators=[address_validate])
# 2.单一字段验证(validate_字段名), 验证地址
def valudate_address(self,data):
if data==‘测试‘:
raise serializers.ValidationError(‘请填写实际地址‘) # 有错就抛出异常
return data #没错就返回
# def validate_phone(self, data):
# # 不符合手机号格式 # raise serializers.ValidationError(‘手机号格式不正确‘)
# model = self.root.Meta.model
# num = model.objects.filter(phone=data).count()
# if num > 0:
# raise serializers.ValidationError(‘手机号已存在‘)
# return data
# 3.所有属性验证器
def validate(self, attrs):
return attrs# 有问题报错
# 没问题返回数据
# attrs:{"username":"zhangsan", "phone":"18538752511", ....}
# 所有属性验证器 # self.context 中有request和view上下文
# self.context[‘view‘].action 可以取到动作 # attrs 是需要序列化的数据
# raise serializers.ValidationError(‘xxx错误‘)
class Meta:
model=User #指定表
# fields = (‘id‘, ) # 临时添加字段也需要写在这里
fields=‘__all__‘ #所有字段
# exclude = [‘id‘] # 排除 id 字段
# read_only_fields = (‘id‘,) # 指定字段为 read_only,
# 扩展address: extra_kwargs = {} # 局部替换某些字段的设定, 或者新增设定
extra_kwargs = {
"address": {
"min_length": 5, # 给地址增加 最小长度限制
"default": ‘默认测试地址‘,
# 增加默认值
}}
class UserUnActiveSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = (‘id‘, ‘username‘, ‘is_active‘) # 临时添加字段也需要写在这里 # fields = ‘all‘ # 所有字段
原文:https://www.cnblogs.com/wangxiaosai/p/13887885.html