当前位置: 首页 > news >正文

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:

相关文章:

  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • iOS开发UI篇—CAlayer层的属性
  • Surrogate data 代理数据
  • 延迟
  • 网络设备
  • 马哥2016全新Linux+Python高端运维班第二周作业
  • 如何搭建配置php开发环境
  • 选择阿里云数据库HBase版十大理由
  • 使用airbnb的eslint
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • 《编码的法则--C++实用经验》
  • 什么是mybatis?
  • nodejs 更新最新版本
  • Git版本控制
  • 1025 选菜
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【Linux系统编程】快速查找errno错误码信息
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • conda常用的命令
  • Django 博客开发教程 8 - 博客文章详情页
  • Docker入门(二) - Dockerfile
  • Javascript基础之Array数组API
  • Next.js之基础概念(二)
  • 大数据与云计算学习:数据分析(二)
  • 好的网址,关于.net 4.0 ,vs 2010
  • 解决iview多表头动态更改列元素发生的错误
  • 看域名解析域名安全对SEO的影响
  • 前端面试总结(at, md)
  • 《码出高效》学习笔记与书中错误记录
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 如何正确理解,内页权重高于首页?
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • #QT(TCP网络编程-服务端)
  • $.ajax中的eval及dataType
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (SpringBoot)第二章:Spring创建和使用
  • (论文阅读40-45)图像描述1
  • (南京观海微电子)——I3C协议介绍
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core 项目指定SDK版本
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET单元测试
  • .Net接口调试与案例
  • .NET实现之(自动更新)
  • .Net中的集合
  • @EnableWebMvc介绍和使用详细demo
  • [28期] lamp兄弟连28期学员手册,请大家务必看一下
  • [bzoj 3534][Sdoi2014] 重建
  • [bzoj1901]: Zju2112 Dynamic Rankings
  • [C#]C# OpenVINO部署yolov8图像分类模型
  • [C语言]——柔性数组