DRF如何序列化外键的字段
我觉得在有些应用场景下,这个操作是有用的,因为可以减少一个AJAX的请求,以增加性能。
当然,是二次请求,还是一次传输。这即要考虑用户体验,还要兼顾服务器性能。
一切是有条件的平衡吧。就算是一次传输,字段少的可以全部传,而字段多的就要自定义啦。
在以下样例里,发布单是主表,但相关的项目,组件,用户,如果默认情况下,只显示ID,很不友好。
我们可以将相关的外键名称也一并序列化啦。
重点的DRF:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'email', 'first_name', 'last_name', 'is_superuser')
class SiteSerializer(serializers.ModelSerializer):
class Meta:
model = Site
fields = ('id', 'name')
class AppSerializer(serializers.ModelSerializer):
class Meta:
model = App
fields = ('id', 'name')
class DeployPoolSerializer(serializers.ModelSerializer):
site = SiteSerializer(source='site_name') #如有问题,记得那个read_only,many之类的参数,然后看官方文档
app = SiteSerializer(source='app_name')
create_user = UserSerializer()
class Meta:
model = DeployPool
fields = ('id', 'name', 'description', 'site', 'app', 'branch_build',
'jira_issue_no', 'create_user', 'change_date')
read_only_fields = ('name',)
angular服务和控制器:
prismVersion.factory("versionSrv", ['$resource', function ($resource) {
return $resource(
"http://127.0.0.1:8000/server_api/version_api/:Id",
{Id: "@Id" },
{'query': {method: 'GET' }},
{update: {method: "PUT"}}
);
}]);
prismVersion.factory("siteSrv", ['$resource', function ($resource) {
return $resource(
"http://127.0.0.1:8000/server_api/site_api/:Id",
{Id: "@Id" },
{'query': {method: 'GET' }},
{update: {method: "PUT"}}
);
}]);
prismVersion.controller('versionCtrl',
['$scope','versionSrv','siteSrv',
function($scope,
versionSrv, siteSrv){
$scope.versions = versionSrv.query();
}]);
angular显示:
<tr ng-repeat="item in versions.results">
<td>
<a href="#" target="_blank">{{item.id}}-{{item.name}}</a>
</td>
<td>
<a href="#">
{{item.app.id}}-
{{item.app.name}}
</a>
</td>
<td>
<a href="#">
{{item.site.id}}-
{{item.site.name}}
</a>
</td>
<td>
{{item.branch_build}}
</td>
<td>
<a href="#">
{{item.jira_issue_version}}
</a>
</td>
<td>
{{item.create_user.id}}-
{{item.create_user.username}}
</td>
<td>
{{item.change_date}}
</td>
</tr>
LOOK:

DRF如何序列化外键的字段的更多相关文章
- MySql数据库在表中添加新字段,设置主键,设置外键,字段移动位置,以及修改数据库后如何进行部署和维护的总结
1,为当前已有的表添加新的字段 alter table student add studentName varchar(20) not null; 2,为当前已有的表中的字段设置为主键自增 alter ...
- django rest framework如何实现nest field显示,如何保存有外键的字段更新
一步一步深入了. 相关设置技巧如下: 直接nest field显示: class VersionPoolSerializer(serializers.ModelSerializer): site_na ...
- DRF 外键字段深度查询优化、ListSerializer辅助完成群改
目录 一.Response封装 二.外键字段深度查询 1.序列化配置exclude.depth 2.模型层函数.插拔式字段查询 三.listserializer辅助类 一.Response封装 用de ...
- DRF 有无外键操作实例
models.py from django.db import models # Create your models here. class Category(models.Model): &quo ...
- MS SQL巡检系列——检查外键字段是否缺少索引
前言感想:一时兴起,突然想写一个关于MS SQL的巡检系列方面的文章,因为我觉得这方面的知识分享是有价值,也是非常有意义的.一方面,很多经验不足的人,对于巡检有点茫然,不知道要从哪些方面巡检,另外一方 ...
- 总结: MySQL(基础,字段约束,索引,外键,存储过程,事务)操作语法
1. 显示数据库列表 show databases; # 查看当前所有数据库 show databases \G #以行的方式显示 2. 在命令行中,执行sql语句 mysql -e 'show ...
- 2-16 MySQL字段约束-索引-外键
一:字段修饰符 1:null和not null修饰符 我们通过这个例子来看看 mysql> create table worker(id int not null,name varchar(8) ...
- mysql字段约束-索引-外键---3
本节所讲内容: 字段修饰符 清空表记录 索引 外键 视图 一:字段修饰符 (约束) 1:null和not null修饰符 我们通过这个例子来看看 mysql> create table wo ...
- mysql之字段的修改,添加、删除,多表关系(外键),单表详细操作(增删改)
字段的修改.添加和删除 create table tf1( id int primary key auto_increment, x int, y int ); #修改 alter table tf1 ...
随机推荐
- Jsonp简单认识(后端使用的是asp.net mvc)
一.Jsonp简介:由于浏览器基于安全有同源策略(同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性)机制,所以前端无法使用Ajax来获取来获取其他域名下返回的数据,而Jsonp可 ...
- java 打包jar文件以在没有安装JDK或JRE的机子上运行
前言: java号称“一次编译,到处运行”,但这有个前提,那就是你的机子上得安装java环境.对于开发人员或其他一些比较懂计算机的人来说这没什么,但是对于一些不懂计算机的人来说这会很麻烦,他们更希望的 ...
- Iterator<转>
Iterator就是迭代器的意思. Iterator是一个接口,利用迭代器主要是获取元素,很少删除元素.有三个方法: 1)hasNext():判断是否有更多的元素,如果有返回true. 2 ...
- LiLinux系统下如何修改主机名
1,用root用户登录,或者切换root用户,先查看当前的主机名:hostname (如果之前没有修改过,一般默认为localhost.localdomain): 2,vi /etc/sysconf ...
- C# 多线程通信详解
一.WaitHandler的类层次 可以看到 WaitHandle是 事件(EventWaitHandle).互斥体(Mutex).信号量(Sempahore)的父类. WaitHandle我们最经常 ...
- 完善dedecms站内搜索代码,为搜索结果添加第*页
自那些平凡而伟大的程序猿开发了内容管理系统(cms),为了让看客们更快地找到自己感兴趣的内容,他们不断完善站内搜索代码,形成了一个小型的站内搜索引擎.可能有些网站模板设计师没考虑到seo的问题,很多站 ...
- 教你如何---构建良好的windows程序(初学者必看)
一使用菜单栏和工具栏 1.菜单栏和工具栏有什么作用和优点: 通过菜单栏把应用程序的功能进行分组,能够方便用户查找和使用,下图所示的菜单栏包含的每一项都是顶层菜单项,顶层菜单项下的选项称为”子菜单”或” ...
- Linux下网络故障诊断
导读 由于实现网络服务器的层次结构比较多,因此当网络出现故障时,解决起来比较复杂.下面由我来为大家详细介绍Linux系统中可能出现的一些网络问题,如网卡硬件问题.网络配置问题.驱动程序问题,以及网络层 ...
- Docker大行其道—初识
导读 随着分布式.云计算.大数据的火热爆发,大量的云计算集群出现,光凭计算机硬件配置的已经无法再次一较高下,虚拟化成为其中最核心的技术.虚拟化既可以通过硬件模拟,也可以通过操作系统层面去实现,近年来热 ...
- 【转】使用genstring和NSLocalizedString实现App文本的本地化
原地址:http://www.cnblogs.com/U-tansuo/p/IOS_NSLocalizedString.html iOS提供了简便的方法来实现本地化,其中用的最多的就是NSLocali ...