美文网首页
(十二)Django Rest framwork序列化器(2)-

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

作者: 足__迹 | 来源:发表于2019-10-20 21:57 被阅读0次

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

    • 如果调用序列化期中只给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

    相关文章

      网友评论

          本文标题:(十二)Django Rest framwork序列化器(2)-

          本文链接:https://www.haomeiwen.com/subject/mouimctx.html