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 相关文章推荐
pycharm 使用心得(三)Hello world!
Jun 05 Python
以911新闻为例演示Python实现数据可视化的教程
Apr 23 Python
Python基于PyGraphics包实现图片截取功能的方法
Dec 21 Python
PyQt5每天必学之单行文本框
Apr 19 Python
详解Python3.6安装psutil模块和功能简介
May 30 Python
解决csv.writer写入文件有多余的空行问题
Jul 06 Python
Python实现的大数据分析操作系统日志功能示例
Feb 11 Python
django 邮件发送模块smtp使用详解
Jul 22 Python
Python实现某论坛自动签到功能
Aug 20 Python
python读文件的步骤
Oct 08 Python
Python实现上下文管理器的方法
Aug 07 Python
python标准库ElementTree处理xml
May 20 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中$_FILES的使用以及注意事项
2013/07/05 PHP
PHP实现阳历到农历转换的类实例
2015/03/07 PHP
windows环境下使用Composer安装ThinkPHP5
2018/05/18 PHP
js宝典学习笔记(上)
2007/01/10 Javascript
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
一个简单的js树形菜单
2011/12/09 Javascript
js截取固定长度的中英文字符的简单实例
2013/11/22 Javascript
javascript对话框使用方法(警告框 javascript确认框 提示框)
2014/01/07 Javascript
jQuery拖拽插件gridster使用指南
2015/04/21 Javascript
JavaScript实现图片自动加载的瀑布流效果
2016/04/11 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
2016/09/03 Javascript
Vue2.0 从零开始_环境搭建操作步骤
2017/06/14 Javascript
详解React native fetch遇到的坑
2018/08/30 Javascript
微信小程序实现跑马灯效果
2020/10/21 Javascript
微信小程序实现跳转的几种方式总结(推荐)
2019/04/24 Javascript
vue router 传参获取不到的解决方式
2019/11/13 Javascript
利用H5api实现时钟的绘制(javascript)
2020/09/13 Javascript
[04:37]DOTA2英雄梦之声Vol20发条
2014/06/20 DOTA
[57:29]Alliance vs KG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/17 DOTA
[01:35:53]完美世界DOTA2联赛PWL S3 Magma vs GXR 第二场 12.13
2020/12/17 DOTA
win10环境下python3.5安装步骤图文教程
2017/02/03 Python
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
用python编写第一个IDA插件的实例
2018/05/29 Python
python修改txt文件中的某一项方法
2018/12/29 Python
Python容器使用的5个技巧和2个误区总结
2019/09/26 Python
python统计文章中单词出现次数实例
2020/02/27 Python
浅谈three.js中的needsUpdate的应用
2012/11/12 HTML / CSS
用canvas做一个DVD待机动画的实现代码
2019/04/12 HTML / CSS
加拿大女装网上购物:Reitmans
2016/10/20 全球购物
切尔西足球俱乐部官方网上商店:Chelsea FC
2019/06/17 全球购物
营销总经理岗位职责
2014/02/02 职场文书
三孔导游词
2015/02/05 职场文书
求职简历自我评价范文
2015/03/10 职场文书
铁人观后感
2015/06/16 职场文书
高一军训感想
2015/08/07 职场文书
Python离线安装openpyxl模块的步骤
2021/03/30 Python