美文网首页
(十二)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