Django 解决由save方法引发的错误


Posted in Python onMay 21, 2020

最近项目中的资产的任务状态频频出现问题,查看日志文件,看代码逻辑,也没发现什么具体的错误,总是过段时间就会出现一个表的字段没有更新的问题,很头疼。

开始时,觉得是没有添加事务,所以同时更新两个不同的表,其中一个表的内容没有写进去;加了事务后,又出现这种问题。

后来看代码,发现有两个线程在同一时间先后修改同一个表,问题来了,django的save()会更新所有的字段。

举个例子,我有两个线程分别修改User表,thread1修改User表的name字段,thread2修改User表的email字段。

在同一个时间,这两个线程获取了相同的User实例, 这个时候同一个实例有两份缓存,thread1修改了name字段,email字段不变;

thread2修改了email字段,name字段不变,这样出来的结果不是我们所设想的那样,name和email字段都会改变,实际上改变的只有email字段,name字段被thread2线程又写回来了。

解决办法:

save()函数加一个update_fields参数就好了。每一次保存的时候写上要更新的字段

use.save(update_fields=["name"])

补充知识:Django models.save()的问题

Django views.py 引用models.py进行modles.objects.create()然后进行.save的问题。

我们是不能直接进行保存的,提交到数据库里面的。

EX:

我们这里通过post获取到信息后。

views.py

def post(self, request, ab=None, all_seat=None):

    # 获取用户信息
    date = request.POST.get('date')
    time = request.POST.get('time')

然后

views.py

seatform = SeatForm(request.POST)
          # 提交给数据库
          #这里的is_valid()是Django默认的,检查是否正确
        if seatform.is_valid():
          # 这里向数据库新增一条信息,然后保存
          getSeat = Seat.objects.create(dateTime=date, classtime=time, status='0', user=name, number=label)
          getSeat.save()

上面的SeatForm()是我们在与views.py同级目录下创建的forms.py

forms.py

class SeatForm(forms.Form):
#注意这里的date和time需要与前端的命名要一直
  date = forms.CharField()
  time = forms.CharField()

通过这样的方法,我们就可以保存到数据库了。

以上这篇Django 解决由save方法引发的错误就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的ORM框架SQLAlchemy入门教程
Apr 28 Python
Python运算符重载用法实例
May 28 Python
python中pygame针对游戏窗口的显示方法实例分析(附源码)
Nov 11 Python
python删除服务器文件代码示例
Feb 09 Python
pandas object格式转float64格式的方法
Apr 10 Python
numpy实现合并多维矩阵、list的扩展方法
May 08 Python
python爬取Ajax动态加载网页过程解析
Sep 05 Python
Python3 Tkinkter + SQLite实现登录和注册界面
Nov 19 Python
Pytorch实现图像识别之数字识别(附详细注释)
May 11 Python
教你使用Pandas直接核算Excel中快递费用
May 12 Python
python 实现图与图之间的间距调整subplots_adjust
May 21 Python
关于Python OS模块常用文件/目录函数详解
Jul 01 Python
Python OrderedDict字典排序方法详解
May 21 #Python
django中嵌套的try-except实例
May 21 #Python
Spark处理数据排序问题如何避免OOM
May 21 #Python
Django 解决开发自定义抛出异常的问题
May 21 #Python
Python logging模块写入中文出现乱码
May 21 #Python
django的403/404/500错误自定义页面的配置方式
May 21 #Python
python 3.8.3 安装配置图文教程
May 21 #Python
You might like
php文件缓存方法总结
2016/03/16 PHP
php实现网页端验证码功能
2017/07/11 PHP
js 实现打印网页中定义的部分内容的代码
2010/04/01 Javascript
仿微博字符限制效果实现代码
2012/04/20 Javascript
jquery右下角弹出提示框示例代码
2013/10/08 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
2014/05/11 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
2015/07/28 Javascript
js实现悬浮窗效果(支持拖动)
2017/03/09 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
2017/07/12 jQuery
js实现移动端轮播图效果
2020/12/09 Javascript
微信小程序 扭蛋抽奖机css3动画实现详解
2019/07/19 Javascript
JavaScript在web自动化测试中的作用示例详解
2019/08/25 Javascript
antd多选下拉框一行展示的实现方式
2020/10/31 Javascript
python读取注册表中值的方法
2013/04/08 Python
浅谈Python中数据解析
2015/05/05 Python
python实现判断数组是否包含指定元素的方法
2015/07/15 Python
python中实现延时回调普通函数示例代码
2017/09/08 Python
基于numpy.random.randn()与rand()的区别详解
2018/04/17 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
2018/08/22 Python
Python批量生成幻影坦克图片实例代码
2019/06/04 Python
Pycharm中Python环境配置常见问题解析
2020/01/16 Python
Django Admin 上传文件到七牛云的示例代码
2020/06/20 Python
Python pytesseract验证码识别库用法解析
2020/06/29 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
学习优秀党员杨宗兴先进事迹材料思想汇报
2014/09/14 职场文书
县委党的群众路线教育实践活动工作情况报告
2014/10/25 职场文书
计划生育工作汇报
2014/10/28 职场文书
男方家长婚礼答谢词
2015/09/29 职场文书
领导莅临指导欢迎词
2015/09/30 职场文书
phpQuery解析HTML乱码问题(补充官网未列出的乱码解决方案)
2021/04/01 PHP
react合成事件与原生事件的相关理解
2021/05/13 Javascript
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android
如何在Python中妥善使用进度条详解
2022/04/05 Python
python中urllib包的网络请求教程
2022/04/19 Python