将视图中的数据库操作提取到校验器中
-
如果调用序列化期中只给data传参,那么serializer.save()实际调用的是序列化期中的create()
-
View
image.png -
serializer
image.png -
如果调用序列化期中同时给data和instance,那么serializer.save()实际调用的是序列化期中的update()
-
view
image.png -
serializer
image.png
创建一个简化的序列化器
1,自定义字段会将自动生成的覆盖掉
2, model : 指定模型类
3,fields:需要的字段
4,exclude :设置排除的字
5,read_only_fields :设置只需要用于序列换输出
6,extra_kwargs :修改字段设置
7,校验器设置与普通校验器一致
#简化序列换器的创建
class ProjectModelSerializer(serializers.ModelSerializer):
#自定义字段会将自动生成的覆盖掉
name = serializers.CharField(label='项目名称', max_length=200, help_text='项目名称提示', validators=
[UniqueValidator(queryset=Projects.objects.all(), message='项目名不能重复'), is_unique_project_name])
# 指定参考哪一个模型类
class Meta:
model = Projects
#指定模型类那些字段来生成序列化期
#设置需要的字段fields
# fields = "__all__"
# fields = ('id','name','leader','tester')
#设置排除的字段
exclude = ('programer','publish_app')
#设置只需要用于序列换输出
read_only_fields = ('tester',)
# #修改字段设置
extra_kwargs = {
'leader': {
'write_only': True,
'error_messages': {
'max_length': "长度不能大于200",
'min_length': '长度不能小于6个字节',
},
'validators' :[UniqueValidator(queryset=Projects.objects.all(),message='项目名不能重复'),
is_unique_project_name],
}
}
def validate_name(self, value):
if not value.endswith('项目'):
raise serializers.ValidationError('必须是"项目"结尾')
return value
# 多字段校验
def validate(self, attrs):
if 'icon' not in attrs['leader'] or 'icon' not in attrs['tester']:
raise serializers.ValidationError('测试和开发人员必须为icon')
return attrs
-
选项参数:
image.png -
通用参数:
image.png
网友评论