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 相关文章推荐
2款Python内存检测工具介绍和使用方法
Jun 01 Python
python3实现短网址和数字相互转换的方法
Apr 28 Python
查看Django和flask版本的方法
May 14 Python
TensorFlow 滑动平均的示例代码
Jun 19 Python
使用Python读取二进制文件的实例讲解
Jul 09 Python
flask框架视图函数用法示例
Jul 19 Python
解决torch.autograd.backward中的参数问题
Jan 07 Python
Python转换itertools.chain对象为数组的方法
Feb 07 Python
关于TensorFlow新旧版本函数接口变化详解
Feb 10 Python
Python稀疏矩阵及参数保存代码实现
Apr 18 Python
浅谈Python 函数式编程
Jun 20 Python
python更新数据库中某个字段的数据(方法详解)
Nov 18 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
桌面中心(二)数据库写入
2006/10/09 PHP
php创建sprite
2014/02/11 PHP
php按单词截取字符串的方法
2015/04/07 PHP
PHP抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例
2016/04/14 PHP
jQuery对象[0]是什么含义?
2010/07/31 Javascript
Javascript将string类型转换int类型
2010/12/09 Javascript
Jquery ajax传递复杂参数给WebService的实现代码
2011/08/08 Javascript
js自定义事件及事件交互原理概述(一)
2013/02/01 Javascript
JS对象与json字符串格式转换实例
2014/10/28 Javascript
JS中frameset框架弹出层实例代码
2016/04/01 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
AngularJS入门教程之更多模板详解
2016/08/19 Javascript
JS for...in 遍历语句用法实例分析
2016/08/24 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
关于js中的鼠标事件总结
2017/07/11 Javascript
vue中使用iview自定义验证关键词输入框问题及解决方法
2018/03/26 Javascript
vue生命周期的探索
2019/04/03 Javascript
微信小程序向Java后台传输参数的方法实现
2020/12/10 Javascript
[08:44]和酒神一起战斗 DOTA2教你做大人
2014/03/27 DOTA
[54:09]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
python创建和删除目录的方法
2015/04/29 Python
Python 25行代码实现的RSA算法详解
2018/04/10 Python
Python+selenium 获取一组元素属性值的实例
2018/06/22 Python
Python2.7实现多进程下开发多线程示例
2019/05/31 Python
纯python进行矩阵的相乘运算的方法示例
2019/07/17 Python
树莓派极简安装OpenCv的方法步骤
2019/10/10 Python
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
英国最大的化装舞会服装网站:Fancydress.com
2017/08/15 全球购物
学生实习自我鉴定
2013/10/11 职场文书
工作中的自我评价如何写好
2013/10/28 职场文书
实习生评语
2014/04/26 职场文书
防灾减灾日活动总结
2014/08/26 职场文书
2014年班级工作总结
2014/11/14 职场文书
荒岛余生观后感
2015/06/09 职场文书
python用海龟绘图写贪吃蛇游戏
2021/06/18 Python
MySQL高级进阶sql语句总结大全
2022/03/16 MySQL