Django restframework 嵌套关系处理
场景:带有外键的model,且是始终一对一创建的关系。
model.py:
class Album(models.Model):album_name = models.CharField(verbose_name=u'名称', max_length=100)artist = models.CharField(max_length=100)class Meta:db_table = 'album'verbose_name = u'album表'class Track(models.Model):album = models.ForeignKey(Album, related_name='tracks')order = models.IntegerField()title = models.CharField(max_length=100)duration = models.IntegerField()class Meta:db_table = 'track'
序列化serializer.py如下:
class AlbumSerializer(serializers.ModelSerializer):class Meta:model = Albumfields = ('id', 'album_name', 'artist')class TrackSerializer(serializers.ModelSerializer):album = AlbumSerializer()class Meta:model = Trackfields = ('id', 'order', 'title', 'duration', 'album')depth = 1def create(self, validated_data):print validated_dataalbum_data = validated_data.pop('album')album = Album.objects.create(**album_data)validated_data['album'] = albumtrack = Track.objects.create(**validated_data)return track
这里有四点需要注意:
1、album = AlbumSerializer() 表示Album里的字段为必填,若不是必填required=False
2、如果嵌套表示应该是项列表,则应将该many=True
标志传递给嵌套序列化
3、create()、update()方法必须重写。默认值ModelSerializer
.create()
和.update()
方法不包括对可写嵌套表示的支持。
4、参数的组装形式如下:
{"order": null,"title": "","duration": null,"album": {"album_name": "","artist": ""} }
views.py:
class AlbumViewSet(viewsets.ModelViewSet):queryset = Album.objects.all()serializer_class = AlbumSerializerclass TrackViewSet(viewsets.ModelViewSet):queryset = Track.objects.all()serializer_class = TrackSerializer
urls.py:
router = routers.DefaultRouter(trailing_slash=True) router.register(r'album', views.AlbumViewSet, base_name='album') router.register(r'track', views.TrackViewSet, base_name='track')
运行:http://127.0.0.1:8000/track/,页面如下:
转载于:https://www.cnblogs.com/wangyingblock/p/11053177.html
Django restframework 嵌套关系处理相关推荐
- Django restframework实现批量操作
这篇文章主要介绍两种方式实现批量操作, 一种是使用 Django restframework提供的装饰器action,可以更具实际情况扩展默认的增删改查操作,扩展性很好:另外一种是使用第三方模块 dj ...
- 基于Python+Django的客户关系管理系统
基于Python+Django的客户关系管理系统 源码获取:https://www.bilibili.com/video/BV1Ne4y1g7dC/ 随着市场经济的深入发展,市场竞争.行业竞争越演越 ...
- 20.Django模型映射关系
Django模型映射关系 三大知识点: 模型类必须都写在app下的models.py文件中. 模型如果需要映射到数据库,所在的app必须注册. 一个数据表对应一个模型类,表中的字段,对应模型中的类属性 ...
- 设置Mybatis(3.2.8)实体嵌套关系(一对多,多对多)遇到的问题及经验总结记录...
2019独角兽企业重金招聘Python工程师标准>>> 原始目标: 配置好mapper,使得可以在实体中表示表之间的联系(一个表外键,用另一个实体表示) 深读了mybatis 官方的 ...
- Django:ORM关系字段
一,ForeignKey 外键类型在ORM中用来表示外键关联关系,一般把ForeignKey字段设置在 '一对多'中'多'的一方. ForeignKey可以和其他表做关联关系同时也可以和自身做关联关系 ...
- Django restframework 认证
一.APIView类 在as_view()一文中,我们自定义的视图类继承自View类,但在restframework中有一个APIView类,它继承并丰富了View类. class APIView ...
- Django restframework中 Serializer 序列化方法详细介绍
以前在写django 的时候,从后端拿到数据返回给前端,每个字段都要单独进行定义,有了Serializer方法,我们可以节省代码量. 首先,编写今天的models 表,并自己进行url 配置,详细参照 ...
- 设置Mybatis(3.2.8)实体嵌套关系(一对多,多对多)遇到的问题及经验总结记录
原始目标: 配置好mapper,使得可以在实体中表示表之间的联系(一个表外键,用另一个实体表示) 深读了mybatis 官方的文章,最后总结出一最重要的的一条,一定要好好利用官方 的autoMappi ...
- Django CRM客户关系管理系统
CRM需求分析 随着信息化时代带来的科技创新,CRM客户关系管理系统带来的效益在已经成为很多企业提高竞争优势的一分部,CRM客户关系管理系统将企业管理和客户关系管理集成到统一的平台,其系统功能主要体现 ...
最新文章
- 【Java数据结构与算法】第二章 单链表及简单面试题
- 问题 G: 奇数还是偶数? 山东科技大学OJ C语言
- 【PL/SQL】学习笔记 (10)例外之 too_many_rows
- 华为有意向西方公司出售 5G 技术;iOS 13 被爆漏洞;GNOME 3.34 正式发布| 极客头条...
- hugo博客html创建目录,Hugo博客添加搜索功能
- K3救砖,梅林刷回官方
- 利用百度api接口制作在线语音合成软件
- threejs 720/360全景工具开发心得
- ZipOutputStream导出压缩文件
- 作为IT售前专家,如何真正调研清楚项目需求?(第二篇)
- 苹果每部iPhone4S可赚3917元 开售首日收入39亿元
- LAMP+haproxy+varnish实现网站访问的动静分离及静态资源缓存
- 小型校园网的设计与组建
- 用while和for循环分别计算100以内奇数和偶数的和,并输出。(Java)
- 企业门户网站前后台开发——油画商城
- 07【Listener、Ajax、Json】
- 设计神经网络的基本原则,神经网络设计与实现
- MySQL六十六问——面试复习必备
- 坐标变换的艺术—PMSM(两相)静止轴系的扩展反电势公式推导
- 大众点评之西安美食的信息基础爬取
热门文章
- solaris10下vim安装
- 比较nio大体上优于io的方面
- 前端知识 | 简析ES6
- 使用php-amqplib连接rabbitMQ 学习笔记及总结
- 分布式实时分析数据库citus数据插入性能优化
- dp - Google Code jam Qualification Round 2015 --- Problem B. Infinite House of Pancakes
- js apply/call/caller/callee/bind使用方法与区别分析
- 思科路由器端口映射配置实例
- 数据类型的小小研究:Access与SQL Server的数据类型
- 说说大型高并发高负载网站的系统架构 (转)