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学习笔记之调用eval函数出现invalid syntax错误问题
Oct 18 Python
python实现二分查找算法
Sep 21 Python
Django实现组合搜索的方法示例
Jan 23 Python
python实现微信发送邮件关闭电脑功能
Feb 22 Python
python脚本生成caffe train_list.txt的方法
Apr 27 Python
Python迭代器与生成器基本用法分析
Jul 26 Python
python 变量初始化空列表的例子
Nov 28 Python
pytorch程序异常后删除占用的显存操作
Jan 13 Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
Jan 20 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
Jul 01 Python
python IP地址转整数
Nov 20 Python
利用python绘制正态分布曲线
Jan 04 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
《星际争霸重制版》兵种对比图鉴
2020/03/02 星际争霸
php设计模式之委托模式
2016/02/13 PHP
教你在header中隐藏php的版本信息
2016/08/10 PHP
PHP中explode函数和split函数的区别小结
2016/08/24 PHP
如何使用PHP给图片加水印
2016/10/12 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
2019/04/27 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
2021/03/09 PHP
又一个小巧的图片预加载类
2007/05/05 Javascript
IE和Mozilla的兼容性汇总event
2007/08/12 Javascript
js实现简洁大方的二级下拉菜单效果代码
2015/09/01 Javascript
JS+CSS实现DIV层的展开、收缩效果
2016/01/28 Javascript
AngularJS实现一次监听多个值发生的变化
2016/08/31 Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
2017/01/17 Javascript
AngularJS表单验证功能分析
2017/05/26 Javascript
JavaScript对JSON数据进行排序和搜索
2017/07/24 Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
2017/12/19 Javascript
Angular简单验证功能示例
2017/12/22 Javascript
vue.js实现的全选与全不选功能示例【基于elementui】
2018/12/03 Javascript
Vue实现本地购物车功能
2018/12/05 Javascript
vue使用swiper实现中间大两边小的轮播图效果
2019/11/24 Javascript
你知道JavaScript Symbol类型怎么用吗
2020/01/08 Javascript
JS实现页面鼠标点击出现图片特效
2020/08/19 Javascript
用Nodejs实现在终端中炒股的实现
2020/10/18 NodeJs
Python使用urllib2模块实现断点续传下载的方法
2015/06/17 Python
Python多进程机制实例详解
2015/07/02 Python
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
python 打印出所有的对象/模块的属性(实例代码)
2016/09/11 Python
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
python 获取毫秒数,计算调用时长的方法
2019/02/20 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
2020/04/10 Python
大学生职业生涯规划方案
2014/01/03 职场文书
中药专业毕业自荐书范文
2014/02/08 职场文书
篮球比赛口号
2014/06/10 职场文书
开服装店计划书
2014/08/15 职场文书
公务员政审材料
2014/12/23 职场文书
电影建国大业观后感
2015/06/01 职场文书