zoukankan      html  css  js  c++  java
  • Django6—ModelSerializer 、create,update方法

    create:

    1、创建序列化器对象时,如果仅仅只传data参数
    2、序列化器对象调用save方法时,会调用序列化器类中的create方法,进行数据创建操作

    serializer = serializers.ProjectModelSerializer(data=python_data)
    
    serializer.save(user={'name': 'xx', 'age': 18}, score=100)
    
    return JsonResponse(serializer.data, json_dumps_params={"ensure_ascii": False})

    update:

    1、创建序列化器对象时,如果同时给data和instance传参数
    2、序列化器对象调用save方法时,会调用序列化器类中的update方法,进行数据更新操作

     serializer = serializers.ProjectSerilizer(instance=self.get_object(pk), data=python_data)
    
     return JsonResponse(serializer.data, json_dumps_params={"ensure_ascii": False}, status=201)

    ModelSerializer 

    1、可以继承ModelSerializer,根据模型类来自动生成序列化器类中的字段

    2、必须得指定model参数(模型类),用于指定使用的模型

    3、会实现create、update方法

    4、会给主键字段、DataTimeField(指定auto_now_add和auto_now参数),会添加read_only=True

    5、会给有指定default参数的字段,添加required=False

    6、会给有指定null参数的字段,添加allow_null=True

    7、会给有指定blank参数的字段,添加allow_blank=True

    class ProjectModelSerializer(serializers.ModelSerializer):
        """
        1、可以继承ModelSerializer,根据模型类来自动生成序列化器类中的字段
        2、必须得指定model参数(模型类),用于指定使用的模型
        3、会实现create、update方法
        4、会给主键字段、DataTimeField(指定auto_now_add和auto_now参数),会添加read_only=True
        5、会给有指定default参数的字段,添加required=False
        6、会给有指定null参数的字段,添加allow_null=True
        7、会给有指定blank参数的字段,添加allow_blank=True
        """
    
        # 方式一:
        # a.可以重新定义模型类中的字段
        # b.重新定义的字段会覆盖自动生成的同名字段
        # name = serializers.CharField(label='项目名称', help_text='项目名称', max_length=10, min_length=3,
        #                              error_messages={'min_length': '项目名称不能少于3位', 'max_length': '项目名称不能超过10位'},
        #                              validators=[
        #                                  UniqueValidator(queryset=Projects.objects.all(), message='项目名不能重复'),
        #                                  is_contain_keyword
        #                              ])
    
        # 可以将自定义的一个序列化器类作为另一个序列化器类中的字段
        interfaces = OneInterfaceSerilizer(label='所属接口信息', help_text='所属接口信息', read_only=True,
                                           many=True)
    
        # token = serializers.CharField(read_only=True)
        # email = serializers.EmailField(write_only=True)
    
        class Meta:
            model = Projects
            # 8、fields指定模型类中需要进行序列化操作的字段
            # a.'__all__',指定模型类中所有的字段都需要进行序列化操作
            # b.可以指定模型类中序列化操作的字段,需要在元组中指定
            # c.exclude指定不需要进行序列化操作的字段
            # d.如果指定了模型类中没有定义的字段,那么必须在fields元组中指定,如果fields为'__all__'或者exclude除外
            # fields = '__all__'
            # fields = ('id', 'name', 'leader', 'is_execute')
            fields = ('id', 'name', 'leader', 'is_execute', 'interfaces', 'token', 'email')
            # exclude = ('create_time', 'update_time', 'is_execute')
    
            # 可以在Meta内部类的read_only_fields,统一指定需要添加read_only=True的字段
            read_only_fields = ('is_execute', 'desc', 'id')
            # 方式二:
            # a.可以在Meta内部类的extra_kwargs中对自动生成的序列化字段进行修改
            # b.将需要修改的字段名作为key,具体修改的内容作为value
            extra_kwargs = {
                'name': {
                    'label': '项目名称',
                    'max_length': 10,
                    'min_length': 3,
                    'error_messages': {
                        'min_length': '项目名称不能少于3位',
                        'max_length': '项目名称不能超过10位'
                    },
                    'validators': [
                        UniqueValidator(queryset=Projects.objects.all(), message='项目名不能重复'),
                        is_contain_keyword
                    ],
                    'write_only': True
                }
            }
    
        def create(self, validated_data):
            user = validated_data.pop('user')
            score = validated_data.pop('score')
            return super().create(validated_data)
  • 相关阅读:
    spring cloud 和 阿里微服务spring cloud Alibaba
    为WPF中的ContentControl设置背景色
    java RSA 解密
    java OA系统 自定义表单 流程审批 电子印章 手写文字识别 电子签名 即时通讯
    Hystrix 配置参数全解析
    spring cloud 2020 gateway 报错503
    Spring Boot 配置 Quartz 定时任务
    Mybatis 整合 ehcache缓存
    Springboot 整合阿里数据库连接池 druid
    java OA系统 自定义表单 流程审批 电子印章 手写文字识别 电子签名 即时通讯
  • 原文地址:https://www.cnblogs.com/erchun/p/14409045.html
Copyright © 2011-2022 走看看