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 相关文章推荐
Django框架中render_to_response()函数的使用方法
Jul 16 Python
Python+selenium实现截图图片并保存截取的图片
Jan 05 Python
numpy 计算两个数组重复程度的方法
Nov 07 Python
详解python中的Turtle函数库
Nov 19 Python
python获取Linux发行版名称
Aug 30 Python
Pytorch使用MNIST数据集实现基础GAN和DCGAN详解
Jan 10 Python
Python实现桌面翻译工具【新手必学】
Feb 12 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
Feb 27 Python
Python实现自动打开电脑应用的示例代码
Apr 17 Python
Python如何实现定时器功能
May 28 Python
Python面向对象特殊属性及方法解析
Sep 16 Python
如何利用pygame实现打飞机小游戏
May 30 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具体实现代码
2010/10/12 PHP
php smarty 二级分类代码和模版循环例子
2011/06/16 PHP
linux下实现定时执行php脚本
2015/02/13 PHP
php使用curl简单抓取远程url的方法
2015/03/13 PHP
php遍历删除整个目录及文件的方法
2015/03/13 PHP
PHP输入流php://input实例讲解
2015/12/22 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
实例讲解php实现多线程
2019/01/27 PHP
JavaScript 数组的 uniq 方法
2008/01/23 Javascript
javascript 类方法定义还是有点区别
2009/04/15 Javascript
JavaScript函数定义的常见注意事项小结
2014/09/16 Javascript
基于jquery实现图片上传本地预览功能
2016/01/08 Javascript
jquery之别踩白块游戏的简单实现
2016/07/25 Javascript
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
Nodejs实现多房间简易聊天室功能
2017/06/20 NodeJs
在Vue中使用highCharts绘制3d饼图的方法
2018/02/08 Javascript
Vue中对拿到的数据进行A-Z排序的实例
2018/09/25 Javascript
AngularJS $http post 传递参数数据的方法
2018/10/09 Javascript
微信小程序image图片加载完成监听
2019/08/31 Javascript
Vue axios 将传递的json数据转为form data的例子
2019/10/29 Javascript
vue 实现超长文本截取,悬浮框提示
2020/07/29 Javascript
[47:35]VP vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
python基础教程之基本内置数据类型介绍
2014/02/20 Python
wxpython学习笔记(推荐查看)
2014/06/09 Python
Python实现国外赌场热门游戏Craps(双骰子)
2015/03/31 Python
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
基于python监控程序是否关闭
2020/01/14 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
pycharm 快速解决python代码冲突的问题
2021/01/15 Python
英国领先品牌手动工具和电动工具供应商:Tooled Up
2018/11/24 全球购物
CheapTickets香港机票预订网站:CheapTickets.hk
2019/06/26 全球购物
德国二手设计师时装和复古时装跳蚤市场:Mädchenflohmarkt
2020/11/09 全球购物
医药营销专业个人自荐信
2013/09/29 职场文书
环境工程毕业生自荐信
2013/11/17 职场文书
简历自荐信范文
2015/03/09 职场文书
阿甘正传观后感
2015/06/01 职场文书