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访问纯真IP数据库的代码
May 19 Python
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
Nov 19 Python
python实现井字棋游戏
Mar 30 Python
Anaconda 离线安装 python 包的操作方法
Jun 11 Python
wxpython实现按钮切换界面的方法
Nov 19 Python
Python中if有多个条件处理方法
Feb 26 Python
python实现简单的购物程序代码实例
Mar 03 Python
Python第三方库的几种安装方式(小结)
Apr 03 Python
零基础小白多久能学会python
Jun 22 Python
Python实现自动装机功能案例分析
Oct 22 Python
python scipy 稀疏矩阵的使用说明
May 26 Python
python使用PySimpleGUI设置进度条及控件使用
Jun 10 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入门速成(2)
2006/10/09 PHP
echo(),print(),print_r()之间的区别?
2006/11/19 PHP
利用PHP生成静态HTML文档的原理
2012/10/29 PHP
php图片上传类 附调用方法
2016/05/15 PHP
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
js 数值项目的格式化函数代码
2010/05/14 Javascript
ExtJS PropertyGrid中使用Combobox选择值问题
2010/06/13 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件打包下载
2010/09/15 Javascript
js 优化次数过多的循环 考虑到性能问题
2011/03/05 Javascript
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
2011/11/10 Javascript
jquery.messager.js插件导致页面抖动的解决方法
2013/07/14 Javascript
JS如何将数字类型转化为没3个一个逗号的金钱格式
2014/01/27 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
JavaScript 学习笔记之操作符(续)
2015/01/14 Javascript
javascript实现随机显示星星特效
2016/01/28 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
基于javascript html5实现多文件上传
2016/03/03 Javascript
微信小程序 Audio API详解及实例代码
2016/09/30 Javascript
Ajax 加载数据 练习代码
2017/01/05 Javascript
微信小程序 详解Page中data数据操作和函数调用
2017/01/12 Javascript
详解vue-router 2.0 常用基础知识点之导航钩子
2017/05/10 Javascript
详解如何运行vue项目
2019/04/15 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
2019/04/16 Javascript
PHP读取远程txt文档到数组并实现遍历
2020/08/25 Javascript
python将图片文件转换成base64编码的方法
2015/03/14 Python
用Python生成器实现微线程编程的教程
2015/04/13 Python
在Django的模型和公用函数中使用惰性翻译对象
2015/07/27 Python
使用pyecharts在jupyter notebook上绘图
2020/04/23 Python
python tkinter实现界面切换的示例代码
2019/06/14 Python
Django CSRF跨站请求伪造防护过程解析
2019/07/31 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
大学本科毕业生求职信范文
2013/12/18 职场文书
银行存款证明样本
2014/01/17 职场文书
高二生物教学反思
2014/01/27 职场文书
考察邀请函范文
2015/01/31 职场文书
商场营业员岗位职责
2015/04/14 职场文书