1、ModelSerializer 如下
from api_test.errorCode.errorCode import Statusclass RelatedbSerializer(serializers.ModelSerializer): """ 关联数据库返回JSON参数序列化 """ globalHost = serializers.CharField() class Meta: model = HostRelateDB fields = ('id', 'globalHost', 'relateDB_name', 'db_host', 'db_username', 'db_pwd', 'db_port') def validate_globalHost(self, globalHost): if globalHost: globalHost = int(globalHost) if globalHost.isdigit() else globalHost if not isinstance(globalHost, int): raise serializers.ValidationError("PARAM_NOT_INT") try: global_host_obj = GlobalHost.objects.get(id=globalHost) except ObjectDoesNotExist: raise serializers.ValidationError("NOT_FOUND") else: raise serializers.ValidationError("PARAM_IS_NULL") return globalHost2、序列化用法如下,新增数据 data = JSONParser().parse(request)serialze = RelatedbSerializer(data=data) #序列化,将json数据传入ModelSerializer if serialze.is_valid(): global_host_obj = GlobalHost.objects.get(id=data["globalHost"]) serialze.save(globalHost=global_host_obj) return JsonResponse(code=Status.SUCCESS.get_code(), msg=Status.SUCCESS.get_msg(),data=serialze.data)3、反序列化用法如下,查询数据 globalHost_id = request.GET.get("globalHost")try: page_size = int(request.GET.get("page_size", 20)) page = int(request.GET.get("page", 1))except (TypeError, ValueError): return JsonResponse(code="999985", msg="page and page_size must be integer!")if not globalHost_id.isdecimal(): return JsonResponse(code="999996", msg="参数有误!")try: GlobalHost.objects.get(id=globalHost_id)except ObjectDoesNotExist: return JsonResponse(code="999995", msg="相关host不存在!")try: relateDBObj = HostRelateDB.objects.filter(globalHost_id=globalHost_id) paginator = Paginator(relateDBObj, page_size) # paginator对象 total = paginator.num_pages # 总页数 try: obm = paginator.page(page) except PageNotAnInteger: obm = paginator.page(1) except EmptyPage: obm = paginator.page(paginator.num_pages) serializer = RelatedbSerializer(obm, many=True) # 反序列化,将查询到的model对象传入ModelSerializer return JsonResponse(data={"data": serializer.data, "page": page, "total": total }, code="999999", msg="成功") 4、反序列化对单个对象和列表对象序列化的区别 3中是对多个对象的序列化,单个序列化如下 try: obj = AutomationTestTaskSerializer(AutomationTestTask.objects.get(project=project_id)) # 使用get方法取单个对象 print("obj:",obj) return JsonResponse(code="999999", msg="成功!", data=obj.data) except ObjectDoesNotExist: print("ObjectDoesNotExist:") return JsonResponse(code="999999", msg="成功!")转载于:https://www.cnblogs.com/yoyo008/p/11593491.html