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的类方法和静态方法
Dec 13 Python
Python中操作MySQL入门实例
Feb 08 Python
python逆向入门教程
Jan 15 Python
Python实现的FTP通信客户端与服务器端功能示例
Mar 28 Python
Python函数装饰器实现方法详解
Dec 22 Python
python对绑定事件的鼠标、按键的判断实例
Jul 17 Python
PyQt5使用QTimer实现电子时钟
Jul 29 Python
Python简易版停车管理系统
Aug 12 Python
使用Python和百度语音识别生成视频字幕的实现
Apr 09 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
Apr 20 Python
Python return语句如何实现结果返回调用
Oct 15 Python
Python使用grequests并发发送请求的示例
Nov 05 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
咖啡是不是喝了会上瘾?咖啡是必须品吗!
2021/03/04 新手入门
我的论坛源代码(一)
2006/10/09 PHP
初学CAKEPHP 基础教程
2009/11/02 PHP
php include加载文件两种方式效率比较
2010/08/08 PHP
强烈声明: 不要使用(include/require)_once
2013/06/06 PHP
php读取本地文件常用函数(fopen与file_get_contents)
2013/09/09 PHP
PHP函数addslashes和mysql_real_escape_string的区别
2014/04/22 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
Yii框架应用组件用法实例分析
2020/05/15 PHP
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
JS正则表达式之非捕获分组用法实例分析
2016/12/28 Javascript
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
js实现购物车功能
2018/06/12 Javascript
Vue中"This dependency was not found"问题的解决方法
2018/06/19 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
2018/06/25 Javascript
javascript显示动态时间的方法汇总
2018/07/06 Javascript
Next.js实现react服务器端渲染的方法示例
2019/01/06 Javascript
关于微信小程序登录的那些事
2019/01/08 Javascript
在Create React App中使用CSS Modules的方法示例
2019/01/15 Javascript
Vue 之孙组件向爷组件通信的实现
2019/04/23 Javascript
深入解析Python中的变量和赋值运算符
2015/10/12 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
2018/05/29 Python
python的time模块和datetime模块实例解析
2019/11/29 Python
python socket通信编程实现文件上传代码实例
2019/12/14 Python
python 字符串的驻留机制及优缺点
2020/06/19 Python
加拿大时尚潮流大码女装购物网站:Addition Elle
2018/04/02 全球购物
c语言常见笔试题总结
2016/09/05 面试题
Java基础面试题
2012/11/02 面试题
领导证婚人证婚词
2014/01/13 职场文书
事务机电主管工作职责
2014/02/25 职场文书
四年级学生期末评语
2014/12/26 职场文书
专家推荐信范文
2015/03/26 职场文书
公司规章制度范本
2015/08/03 职场文书
修辞手法有哪些?
2019/08/29 职场文书
使用pycharm运行flask应用程序的详细教程
2021/06/07 Python
Python编解码问题及文本文件处理方法详解
2021/06/20 Python