django model序列化作用举例
一直对使用DRF的了解停留在一知半解的状态,今天在实际操作中,感受到了DRF带来的方便
Django工程,其中两个model定义如下:
AutomationHeadRaw:
class AutomationHeadRaw(models.Model):
"""
测试用例的请求的json形式参数
"""
id = models.AutoField(primary_key=True)
automationCaseApi = models.OneToOneField(AutomationCaseApi, related_name='headRaw',
on_delete=models.CASCADE, verbose_name='接口')
data = models.TextField(verbose_name='源数据请求头json数据', blank=True, null=True) class Meta:
verbose_name = '请求头json格式参数'
verbose_name_plural = '请求头json格式参数管理'
AutomationCaseApi:
class AutomationCaseApi(models.Model):
"""
用例执行接口
"""
id = models.AutoField(primary_key=True)
automationTestCase = models.ForeignKey(AutomationTestCase, on_delete=models.CASCADE,
verbose_name='用例', related_name="api")
name = models.CharField(max_length=50, verbose_name='接口名称')
httpType = models.CharField(max_length=50, default='HTTP', verbose_name='HTTP/HTTPS', choices=HTTP_CHOICE)
requestType = models.CharField(max_length=50, verbose_name='请求方式', choices=REQUEST_TYPE_CHOICE)
apiAddress = models.CharField(max_length=1024, verbose_name='接口地址')
requestParameterType = models.CharField(max_length=50, verbose_name='参数请求格式', choices=REQUEST_PARAMETER_TYPE_CHOICE)
headType = models.CharField(max_length=50, verbose_name='请求头部格式', choices=REQUEST_PARAMETER_TYPE_CHOICE)
formatRaw = models.BooleanField(default=False, verbose_name="是否转换成源数据")
examineType = models.CharField(default='no_check', max_length=50, verbose_name='校验方式', choices=EXAMINE_TYPE_CHOICE)
httpCode = models.CharField(max_length=50, blank=True, null=True, verbose_name='HTTP状态', choices=HTTP_CODE_CHOICE)
responseData = models.TextField(blank=True, null=True, verbose_name='返回内容')
# 新增用例相关参数
preFun = models.CharField(max_length=1024, blank=True, null=True, verbose_name='前置函数')
afterFun = models.CharField(max_length=1024, blank=True, null=True, verbose_name='后置函数')
skipFlag = models.CharField(max_length=50, blank=True, null=True, verbose_name='跳过标识', choices=Y_N_CHOICE)
stopFlag = models.CharField(max_length=50, blank=True, null=True, verbose_name='中断标识', choices=Y_N_CHOICE)
retryNum = models.IntegerField(verbose_name='重试次数', default=1) def __unicode__(self):
return self.name def __str__(self):
return self.name class Meta:
verbose_name = '用例接口'
verbose_name_plural = '用例接口管理' 1、手工转换获取到了AutomationHeadRaw模型中的data数据(json格式)
需求为取AutomationHeadRaw模型中的data数据(json格式),我在使用的时候,没有给AutomationHeadRaw建立对应的序列化类,取数时使用一下数据获取data数据:
head_test = AutomationHeadRaw.objects.filter(automationCaseApi=self.case_api_id)
self.header =json.loads(json.loads(serializers.serialize('json', head))[0]["fields"]["data"]) 手工转换获取到了AutomationHeadRaw模型中的data数据(json格式)
2、自动转换获取到了AutomationCaseApi模型中的data数据
另一个模型AutomationCaseApi ,定义了对应的model序列化类AutomationCaseApiSerializer如下:
class AutomationCaseApiSerializer(serializers.ModelSerializer):
"""
自动化用例接口详细信息序列化
"""
headers = AutomationHeadSerializer(many=True, read_only=True)
headRaw = AutomationHeadRawSerializer(many=False, read_only=True) # 一对一表格,变量名一定要和model定义relate-name一直
parameterList = AutomationParameterSerializer(many=True, read_only=True)
parameterRaw = AutomationParameterRawSerializer(many=False, read_only=True) class Meta:
model = AutomationCaseApi
fields = ('id', 'name', 'httpType', 'requestType', 'apiAddress', 'headers', 'headType', 'requestParameterType',
'headRaw', 'formatRaw', 'parameterList', 'parameterRaw', 'examineType', 'httpCode', 'responseData', 'preFun',
'afterFun', 'skipFlag', 'stopFlag', 'retryNum') 则获取模型AutomationCaseApi可以自动转换:
self.case_data = AutomationCaseApiSerializer(
AutomationCaseApi.objects.get(id=self.case_api_id, automationTestCase=self.case_id)).data
3、因此上面的AutomationHeadRaw 可以通过添加model序列化类AutomationHeadRawSerializer自动转换数据格式:
class AutomationHeadRawSerializer(serializers.ModelSerializer):
"""
自动化用例接口json类型请求头信息序列化
"""
class Meta:
model = AutomationHeadRaw
fields = ('id', 'automationCaseApi', 'data') 获取数据语句可以改成,不需要手工转换:
head = AutomationHeadRawSerializer(
AutomationHeadRaw.objects.filter(automationCaseApi=self.case_api_id),
many=True).data 注意:
上面获取数据的AutomationHeadRawSerializer()方法,入参1 :AutomationHeadRaw.objects.filter(automationCaseApi=self.case_api_id)
可以为两种对象:
AutomationHeadRaw.objects.filter(automationCaseApi=self.case_api_id) (filter方法对象为queryset类型)
AutomationCaseApi.objects.get(id=self.case_api_id, automationTestCase=self.case_id)(get方法对象为model类 类型)
django model序列化作用举例的更多相关文章
- 【转】Django Model field reference学习总结
Django Model field reference学习总结(一) 本文档包含所有字段选项(field options)的内部细节和Django已经提供的field types. Field 选项 ...
- Django:Model的Filter
转自:http://www.douban.com/note/301166150/ django model filter 条件过滤,及多表连接查询.反向查询,某字段的distinct 1.多表 ...
- Django学习之四:Django Model模块
目录 Django Model 模型 MODEL需要在脑子里记住的基础概念 区分清楚,必须不能混淆的 class Meta 内嵌元数据定义类 简单model创建实例 数据源配置 接着通过models在 ...
- django rest_framework 序列化组件详解
为什么要用序列化组件 当我们做前后端分离的项目,我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿到 ...
- django model数据 时间格式
from datetime import datetime dt = datetime.now() print '时间:(%Y-%m-%d %H:%M:%S %f): ' , dt.strftime( ...
- 从django的序列化到rest-framework 序列化
1.利用Django的view实现返回json数据 from django.views.generic import View from goods.models import Goods class ...
- 关于Django的序列化
阅读目录 Django支持的序列化格式 Django的序列化 Django支持的序列化格式 1 2 3 4 Identifier Information xml Serializes to and f ...
- Django Model 数据表
Django Model 定义语法 版本:1.7主要来源:https://docs.djangoproject.com/en/1.7/topics/db/models/ 简单用法 from djang ...
- django的序列化问题
Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式 1.serializers from django.core import seria ...
随机推荐
- Java类初始化和实例初始化过程
1.类初始化过程 一个类要创建实例需要先加载并初始化该类 main方法所在的类需要先加载和初始化 一个子类要初始化需要先初始化父类 一个类初始化就是执行<client>()方法(编译器生成 ...
- PHP常见数组排序方法小结
1.简单数组排序 sort() 函数和rsort() 函数: 语法规则: bool sort(array &array [,int sort_flags] bool rsort(array & ...
- 浏览器给openresty连接发送参数请求,查询数据库,并返回json数据
nginx.conf配置文件 #user nobody; worker_processes 1; error_log logs/error.log; #error_log logs/error.log ...
- webpack搭建前端开发环境
webpack的版本已经是来到了4.0,口号是无配置就可以使用webpack,当然是使用一些基本的功能 1.安装以下webpack的一些必须npm包 npm install webpack npm i ...
- vue elementui table组件内容换行
解决方案 tableData = [ { "name": "domain111", "metric": [ "平均耗时" ...
- Ubuntu分区方案(菜鸟方案、常用方案和进阶方案)
菜鸟方案 “/”与swap两个分区就可以应付绝大多数的应用 常用方案 分为3个区 1. 挂载点/:主分区:安装系统和软件:大小为30G:分区格式为ext4: 2. 挂载点/home:逻辑分区:相当于“ ...
- LNMP 架构安装部署
PHP 安装 LNMP 下 php 在 Apache 服务下是 libphp5.so nginx 服务下是 9000 端口 #确保 web 服务和 MySQL 正常 143 [root@oldboy ...
- Qt设置生成的exe文件图标
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_37354286/article/d ...
- P5200 [USACO19JAN]Sleepy Cow Sorting 牛客假日团队赛6 D 迷路的牛 (贪心)
链接:https://ac.nowcoder.com/acm/contest/993/E 来源:牛客网 对牛排序 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言 ...
- Codeforces 909 substr用法 思维合并线段目标最少 Py语句逆推DP vecrtor缩点删不同颜色点模拟 拓扑排序处理任务
A str.substr(i,j) 从str[i]开始起取j个字符作为返回的字符串 /* Huyyt */ #include <bits/stdc++.h> using namespace ...