The `.update()` method does not support writable nestedfields by default. Write an explicit `.update()` method for serializer `...`, or set `read_only=True` on nested serializer fields.解决办法
原因
Serializers中,外表的字段如source="group.title"不能进行写入操作
解决办法
将外表字段设置为
read_only=True,此时可能有人就会问了:前端字段传过来还是group字段的id值,还是想以group字段进行数据存储怎么办?这时候可以利用回调函数perform_update(self, serializer)进行手动存储,如:# Serializer类
class XxxSerializer(serializers.ModelSerializer):
group = serilizers.CharField(label='小组', source='group.title', read_only=True)
... # 模型类
class XxxView(...):
def perform_update(self, serializer):
group_id = self.request.data.get('group') # 获取group传参
if isinstance(group_id, int): # 对参数类型进行校验
serializer.save(group_id=group_id) # 保存数据,serializer是序列化器的实例
else:
serializer.save() # 其他情况也要保存,否则数据不会更改
这样就可以实现字段不改变的情况下,对外表数据的查询和更改。
注:create同理
问题延伸
对于给前端的数据是给id还是给中文的问题,我的建议是选项固定,前端写死。选项动态,从后端拉取。
- 数据显示
做过前端的都知道,前端的数据显示主要是以中文显示,显示个id肯定是不行的。那id对应中文怎么来,那就可以选项固定前端写死,选项不固定就从后端拉取,然后做id的映射。
- 数据更新
数据更新还是给id,然后就是上述的处理方法。
有个特殊情况:当编辑不改变数据直接提交的时候,可能给予的是中文,那就在接收数据时进行数据校验排除就行。
The `.update()` method does not support writable nestedfields by default. Write an explicit `.update()` method for serializer `...`, or set `read_only=True` on nested serializer fields.解决办法的更多相关文章
- #1214 - The used table type doesn't support FULLTEXT indexes解决办法
#1214 - The used table type doesn't support FULLTEXT indexes报此错误的原因是:InnoDB不支持FULLTEXT类型的索引. 网上的解决办法 ...
- tk.mybatis通用插件updateByPrimaryKeySelective无法自动更新ON UPDATE CURRENT_TIMESTAMP列的解决办法
tk.mybatis是一个很好用的通用插件,把CRUD这些基本的数据操作全都用动态SQL语句自动生成了,mapper和xml里十分清爽,但是昨天发现有一个小坑,记录在此: 有一张表,结构如下(已经简化 ...
- [原创] Gradle DSL method not found: 'android()' 和 buildToolsVersion is not specified 的解决办法。
今天在用Android Studio 2.0 打开别人的较早版本生成的工程时, 提示: Gradle DSL method not found: 'android()'. 解决办法为,打开根目录下面的 ...
- 编译驱动模块时,出现“stack protector enabled but no compiler support”[解决办法]【转】
转自:http://blog.chinaunix.net/uid-26847859-id-3297170.html 原文地址:编译驱动模块时,出现“stack protector enabled bu ...
- JSON: Property 'xxx' has no getter method的解决办法
在使用JSONArray.fromObject时候出现JSONException:Property 'xxx' has no getter method. 解决办法:设置bean为public属性即可 ...
- 使用ABP时报错“UPDATE 语句与 FOREIGN KEY SAME TABLE 约束"FK_dbo.AbpUsers_dbo.AbpUsers_LastModifierUserId"冲突”的解决办法
ABP理论学习总目录 一步一步使用ABP框架搭建正式项目系列教程 ABP之Module-Zero学习目录 本篇目录 问题 原因 解决办法 问题 问题的是在下面这种情况下出现的: 我在使用CodeFir ...
- RCP: P2 Update两个烦人bug和解决办法
问题 Eclipse新的P2 Update机制,使用起来很方便,如果使用P2 plugin自带的UI,开发者完全不用写任何代码 即可实现application的在线更新. 但是P2 Update至少有 ...
- eclise -The method onClick(View) of type new View.OnClickListener(){} must override a superclass method
在做arcgis android开发的时候,突然遇到这种错误,The method onClick(View) of type new View.OnClickListener(){} must ov ...
- update值与原值相同时,SQL Server会真的去update还是忽略呢?
原文:update值与原值相同时,SQL Server会真的去update还是忽略呢? 考虑下面的情况: 当update值与原值相同时,SQL Server会真的去update还是忽略?例如: upd ...
- AndroidStudio运行项目出现Unsupported method: AndroidProject.getPluginGeneration()错误解决办法
一.错误描述 今天在使用AndroidStudio运行项目时出现了一个Unsupported method: AndroidProject.getPluginGeneration()错误,如下图所示: ...
随机推荐
- Win10中找回曾复制过的东西
按Win+V,如果弹出的"剪贴板历史"设置已经打开,那么就可以找回.建议大家打开这项设置以防万一.
- ubuntu 22.04 网络配置ib网卡配置
第一步:查看Ubuntu版本与内核版本 cat /etc/issue 这说明系统的版本为:Ubuntu 20.04.4 LTS \n \l uname -a Linux gacs-gm-11 5.4. ...
- vue实现图片上传且实时预览
<div class="up-img"> <div class="imgList"> <ul> <li v-for=& ...
- WDA学习(26):Phase Indicator使用
1.19 UI Element:Phase Indicator使用 本实例测试创建Phase Indicator; 运行结果: 1.创建Component,View: V_PHASE_IND; 2.创 ...
- git -----已经被跟踪文件如何在本地提交时忽略
git update-index --assume-unchanged C.md 注:忽略后将不再拉取和提交c.md这个文件 git update-index --no-assume-unchange ...
- oracle 导出导入表 不到出指定表
导出多个表 exp LSXYYSZHMRMS/******@PK99SERVICE file=d:\fuhcx.dmp tables=(fhcxgxxx,fhcxjcxx,fhcxlbxx,fhcx ...
- consul剔除某个服务
curl --request PUT http://ip:端口/v1/agent/service/deregister/服务对应的id地址
- appium:appium上手
记录一下appium上手,如果用过selenium,appium就可以在一天上手. 准备: 1.去网上下载一个安卓sdk 2.通过android sdk中aapt dump badging xx.ap ...
- laravel-hash表的简单使用
- git commit提交代码时跳过 eslint校验
在使用命令 git commit -m '提交信息' 将本地代码提交到远程仓库时候, 如果项目安装了 per-commit,则会在Git键入提交信息前进行代码风格检查,如果代码不符合相应规则,则报错. ...