serializers--嵌套关系作为字段来表示
参考官网:https://www.django-rest-framework.org/api-guide/relations/#nested-relationships
先建立model
class Album(models.Model):
album_name = models.CharField(max_length=)
artist = models.CharField(max_length=) class Track(models.Model):
album = models.ForeignKey(Album, related_name='tracks', on_delete=models.CASCADE)
order = models.IntegerField()
title = models.CharField(max_length=)
duration = models.IntegerField() class Meta:
unique_together = ('album', 'order')
ordering = ['order'] def __str__(self):
return '%d: %s' % (self.order, self.title)
嵌套关系可以通过使用序列化器作为字段来表示。
如果该字段用于表示to-many关系(意思是:外键在另外一个model,不懂的话,下面例子会补充),则应该将many=True标志添加到序列化器字段中。
如下ModelSerializer序列化:
class TrackSerializer(serializers.ModelSerializer):
class Meta:
model = Track
fields = ('order', 'title', 'duration') class AlbumSerializer(serializers.ModelSerializer):
tracks = TrackSerializer(many=True, read_only=True) #刚才上面说的就是这里,外键在Track上,不知道你懂不懂 class Meta:
model = Album
fields = ('album_name', 'artist', 'tracks')
默认情况下,嵌套序列化器是只读的。如果希望支持对嵌套序列化器字段的写操作,则需要创建create()和/或update()方法,以便显式指定应该如何保存子关系。
如果要实现可写,就要去掉read_only=true,同时添加create方法,如下:
class TrackSerializer(serializers.ModelSerializer):
class Meta:
model = Track
fields = ('order', 'title', 'duration') class AlbumSerializer(serializers.ModelSerializer):
tracks = TrackSerializer(many=True) class Meta:
model = Album
fields = ('album_name', 'artist', 'tracks') def create(self, validated_data):
tracks_data = validated_data.pop('tracks')
album = Album.objects.create(**validated_data)
for track_data in tracks_data:
Track.objects.create(album=album, **track_data)
return album
#必须有create,才能使用save(), data={...} ,比如:
a=IdcSerializer(data=data)
a.save()
serializers--嵌套关系作为字段来表示的更多相关文章
- 关系类型字段 -- Django从入门到精通系列教程
该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...
- day47 选择器优先级及嵌套关系
复习 1.前端: 网页, html + css + js 2.html三个组成部分:标签,指令和转义字符 标签: <>包裹, 以字母开头, 可以结合-|数字, 能被浏览器解析的标记 3.常 ...
- 基础选择器,长度与颜色,标签display,嵌套关系,盒模型,盒模型布局
css基础选择器 # *(统配选择器): 控制html, body,以及body下所有用于显示的标签 # div(标签选择器): 该标签名对应的所有该标签 # .(class选择器)(eg: .div ...
- 前端,基础选择器,嵌套关系.display属性,盒模型
基础选择器 1.统配选择器 控制html,body及body内跟显示相关的标签 *{ width:80px; height:80px; background-color:red; } 2.类选择器 以 ...
- MySql语句中select可以嵌套么,字段的重命名可以用中文么
今天文档中看到的查询语句,SELECT后面又跟了一个SELECT嵌套,而且把字段重命名为中文,请问可以这样做么 MySql语句中select可以嵌套么,字段的重命名可以用中文么 >> my ...
- DRF框架在嵌套关系下实现嵌套对象字段的过滤
当需要对关联对象的字段进行选择性显示时,在所对应的serializer类中声明引用的字段. 例如: class TrackSerializer(serializers.ModelSerializer) ...
- crmsql句子的实体关系实体字段的信息窗口
在crm里面怎样用sql语句查询这些信息? 查询实体信息: --查询实体信息,实体名称:account select * from MetadataSchema.Entity where name= ...
- django关系类型字段
一.多对一(ForeignKey) 多对一的关系,通常被称为外键.外键字段类的定义如下: class ForeignKey(to, on_delete, **options)[source] 外键需要 ...
- CRM N:1 关系或者字段无法删除
点开详细信息查看那些实体引用了该组件.查看内容如下: 1 查看窗体上有无该字段; 2 查看视图中有无该字段; 3 查看试图的 筛选条件; 4 查看试图的 查找列; 5 发布之后再试试.
随机推荐
- CDH6.2的fair-scheduler.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><alloc ...
- Centos7安装vim8.0 + YouCompleteMe
更新yum sudo yum upgrade sduo yum update 下载git sudo yum install git 升级vim以及gcc 升级gcc sudo yum install ...
- [转帖]从壹开始前后端分离【重要】║最全的部署方案 & 最丰富的错误分析
从壹开始前后端分离[重要]║最全的部署方案 & 最丰富的错误分析 https://www.cnblogs.com/laozhang-is-phi/p/beautifulPublish-most ...
- Selenium绕过登录的实现
1.使用命令行启动Chrome:Mac:/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome -remote-debugging ...
- 部门innercode刷新
最近遇到一个小需求,就是刷新部门的innercode.在导入数据的时候,innercode乱了,所以需要刷新.那先说说innercode是什么吧. 大家都知道部门是一个树形结构,但是有时候想知道一个部 ...
- (一)HTTP协议的一些知识点(来自那些年的笔记)
目录 http协议1.0.1.1两个版本的区别 访问几次服务器? Http请求行和请求方式详解 可以在超链接上传一些数据 HTTP请求头各个头字段的详解 HTTP响应和响应行状态详解 断点下载 HTT ...
- CentOS7.x使用overlay2文件系统
当我查看docker详细信息时会看到如下警告: WARNING: devicemapper: usage of loopback devices is strongly discouraged for ...
- (十二)Hibernate中的多表操作(2):单向多对一
由“多”方可知“一”方的信息,比如多个员工使用同一栋公寓,员工可以知道公寓的信息,而公寓无法知道员工的信息. 案例一:使用xml配置 pojo类 Group.java package bean; // ...
- (错误)Lucene工具Luck启动错误
启动luke命令行下图错误 错误原因:luke版本和lucene版本不匹配,lucene5.3.0版本必须用luke5.3.0版本才能打开索引. 解决方法:更新luke版本即可. luke 所有版本下 ...
- 基于微软hyper-v虚拟化服务器搭建方法和步骤整理
基于Microsoft基础设施私有云计算搭建 摘要:私有云是指组织机构建设的专供自己使用的云平台,它所提供的服务不是供他人使用,而是供自己的内部人员或分支机构使用,不同于公有云,私有云部署在企业内部网 ...