(十二)Django Rest framwork序列化器(2)-

2019-10-20  本文已影响0人  足__迹

将视图中的数据库操作提取到校验器中

创建一个简化的序列化器

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

上一篇下一篇

猜你喜欢

热点阅读