模型序列化器的使用

  • ModelSerializer与常规的Serializer相同添加了以下方法
  •  

     

  • 基于模型类自动生成一系列字段
  • 基于模型类自动生成validators,比如unique_together
  • 包含create()与update()方法
  • 查询,添加,更新操作如下
      • 复制代码
        class StudentView2(View):
            def get2(self, request):
                """序列化单条数据"""
                student = Student.objects.first()
                serializer = stuModelSerilizer(instance=student)
                print(serializer.data)
                return JsonResponse(serializer.data)
        
            def get3(self, request):
                """序列化多条数据"""
                student_list = Student.objects.all()
                serializer = stuModelSerilizer(instance=student_list, many=True)
                print(serializer.data)
                return JsonResponse(serializer.data, safe=False)
        
            def get4(self, request):
                """反序列化验证数据,添加操作"""
                # 模拟用户传来的数据
                params = {
                    "name": "桑德",
                    "age": 20,
                    "sex": 0,
                    "class_null": "a102",
                    "description": "难得先纷",
                }
                serializer = stuModelSerilizer(data=params)
                serializer.is_valid(raise_exception=True)
                serializer.save()
                return JsonResponse(serializer.data)
        
            def get(self, request):
                """反序列化验证数据,更新操作"""
                # 模拟用户传来的数据
                pk = 6
                params = {
                    "name": "里昂",
                    "age": 22,
                    "sex": 1,
                    "class_null": "a104",
                    "description": "无妄站灭",
                    "user":"root",
                }
                student = Student.objects.get(pk=pk)
                serializer = stuModelSerilizer(instance=student, data=params)
                serializer.is_valid(raise_exception=True)
                serializer.save()
                return JsonResponse(serializer.data)
        
        # 模型类序列化器
        class stuModelSerilizer(serializers.ModelSerializer):
            """学生模型类序列化器"""
        
            # 1.声明要转换的字段(不是模型类的字段手动添加)
            user = serializers.CharField()
        
            # 2.模型类信息
            class Meta:
                model = Student
                fields = "__all__"  # 全字段
                # exclude=[]#不需要的字段
                # fields=[]#需要的字段
        
            # 字段补充声明(以此类推)
          
          
        #批量指定只读字段,不需要用户上传,服务端直接返回
        read_only_fields = []

        # max_length等验证字段必须是序列化器的选项参数 extra_kwargs = { "name": { "error_messages": { "max_length": "对不起,名字最长只能为20个字", }, "age": { "min_value": 0, "max_value": 100, "error_message": { "min_value": "年龄不能为0或者负数", "max_value": "年龄超过100不能使用本产品", } } } } # 非数据库模型的字段验证,注意不保存到数据库应该raise,一旦return就会报错 def validate_user(self, data): if data != "root": raise serializers.ValidationError( code="user", detail="只有root用户才可以执行此操作", )
        复制代码

         

posted @   Hide_凉辰  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示