在django restful framework中设置django model的property
众所周知,在django的model中,可以某些字段设置@property和setter deleter getter,这样就可以在存入数据的时候进行一些操作,具体原理请参见廖雪峰大神的博客https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386820062641f3bcc60a4b164f8d91df476445697b9e000
可是在我的实现中,如果在数据库中实现了setter方法,在使用django restful framework序列化后,这个property会被自动忽略,具体表现就是虽然传入了这个属性的值,但是在最终写入数据库时根本看不见这个,写入的是空值。
这是我的代码
class Host(models.Model):id = models.AutoField(primary_key=True)superPass = models.CharField(max_length=128, null=True, default='')@propertydef superPassword(self):origin_password = self.super_pass[0:-5]return origin_password@superPassword.setterdef superPassword(self,new_password):origin_password = new_passwordencrypted = origin_password + "fadfa"self.super_pass = encrypted @superPassword.deleterdef superPassword(self):del self.super_pass
可是插入的时候总是superpass无法插入。查找了源码,是在django-restful-framework目录下的 serializers.py的第236行有这么一行代码
self._validated_data = self.run_validation(self.initial_data)
调试可以看到在self.initial_data中可以看到我的字段,可是在self._validated_data中无法看到这个字段。
再往下查查不到了,继承的太乱了,实在不知道这种大型项目是怎么维护的。
实在没法了,只能在视图中重载了perform_create方法看下取到的值是什么
def perform_create(self, serializer):print(serializer)print(type(serializer))serializer.save()
看到serializer中关于superpassword这一行是
superPassword = ReadOnlyField()
花擦,原来问题在这里,他直接把这个字段给我置为只读了,吐血
怎么解决呢?只能在序列化的时候在类中加一个属性
class HostSerializer(serializers.ModelSerializer):superPassword = serializers.CharField(allow_null=True, label='superPassword', max_length=16, required=False)class Meta:省略
这样就好了,原来如北,写篇博客声讨一下这个大坑
转载于:https://www.cnblogs.com/wuxie1989/p/9014877.html
在django restful framework中设置django model的property相关推荐
- 【接口文档】Django restful framework中自动生成API文档
Django restful framework中自动生成API文档 一.Swagger概述 1.引言 当接口开发完成,紧接着需要编写接口文档.传统的接口文档使用Word编写,or一些接口文档管理平台 ...
- django restful 请求_利用 Django REST framework 构建 RESTful Web API
利用 Django REST framework 构建 RESTful Web API 终于到了动手操作的环节啦,这一节,我们以师生管理系统为例,带领大家搭建一套 framework Web API. ...
- Django REST Framework中的Serializer relations
官方文档原文 Relational fields are used to represent model relationships. They can be applied to ForeignKe ...
- 如何在 Django REST Framework 中对分页结果过滤和排序?
作者 | 大江狗 责编 | 张文 来源 | Python Web 与 Django 开发 (ID:Python_Web_Django) 在本篇文章中我们将向你演示如何在 Django REST Fr ...
- 解决Django Rest Framework中的跨域问题
解决Django Rest Framework中的跨域问题 参考文章: (1)解决Django Rest Framework中的跨域问题 (2)https://www.cnblogs.com/qicu ...
- 10- vue django restful framework 打造生鲜超市 -用户登录和手机注册(中)
Vue+Django REST framework实战 搭建一个前后端分离的生鲜超市网站 Django rtf 完成 手机注册和用户登录(中) Json Web Token的原理 因为我们的drf 的 ...
- 7- vue django restful framework 打造生鲜超市 -商品类别数据展示(上)
Vue+Django REST framework实战 搭建一个前后端分离的生鲜超市网站 Django rtf 完成 商品列表页 并没有将列表页的数据json 与前端的页面展示结合起来 讲解如果将dr ...
- 21- vue django restful framework 打造生鲜超市 -首页商品分类显示功能
Django2.0.2(Django-rest-framework)以及前端vue开发的前后端分离的商城网站 线上演示地址: http://vueshop.mtianyan.cn/ github源代码 ...
- Django restful Framework 之序列化与反序列化
1. 首先在已建好的工程目录下新建app命名为snippets,并将snippets app以及rest_framework app加到工程目录的 INSTALLED_APPS 中去,具体如下: IN ...
最新文章
- 开发一次、多端覆盖的开源统一框架
- 【控制】《多智能体系统一致性与复杂网络同步控制》郭凌老师-第3章-具有扩散作用的多智能体系统领导-跟随一致性
- 多线程:Executor、Sleep、Deamon、Yeild
- 串联矩阵matlab代码,Matlab串联矩阵函数【horzcat】详细解析
- 微软CEO纳德拉拥抱Linux意欲何为?
- 前后端开发是怎么合作分工的
- cad怎么将图层后置_CAD中如何将某1个图层置于其他图层之上.doc
- Mybatis源码阅读(二):动态节点解析2.1 —— SqlSource和SqlNode
- 计算机等级考试java题型_计算机等级考试报考建议
- 普林斯顿校长2018演讲:读书无用是最大的谎言
- 品质标签分几种颜色_北京标签不干胶印刷厂
- qrcodeJS生成二维码
- Verilog实现千兆以太网传输
- python 修改证件照的尺寸
- 5.2 BP误差逆传播
- JS实现数组和数组对象倒序(reverse方法)
- java小白日常报错
- html 掉爱心特效,微信发什么会掉爱心特效(微信特效词语合集)
- linux 下 FFmpeg 录制命令
- 白魔法师--图的连通块问题(牛客小白月赛25)
热门文章
- oracle 迁移用户信息,Oracle备份一个用户并迁移
- bootanimation文件名_Android开机logo制作
- Google Guava官方教程
- 各类电脑高效率神器使用及下载地址
- mysql忘记密麻麻_mysql忘记密码怎么办
- linux ls什么意思,linux – 你如何确定bash ls的颜色是什么意思?
- abap如何找屏幕增强_因增强导致BDC录屏执行异常的梗
- 一周一论文(翻译 总结)— [SOCC 13] jVerbs Ultra-Low Latency for Data Center Applications 在JVM虚拟机上构建RDMA的verbs操作
- unity调用普通java类_Unity中C#和Java的相互调用实例代码
- linux 不关机添加硬盘,完美解决Ubuntu Linux关机异响[SATA硬盘]