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中的map、reduce和filter浅析
Apr 26 Python
python中Flask框架简单入门实例
Mar 21 Python
编写Python脚本来实现最简单的FTP下载的教程
May 04 Python
详解Python 序列化Serialize 和 反序列化Deserialize
Aug 20 Python
numpy使用技巧之数组过滤实例代码
Feb 03 Python
详解tensorflow实现迁移学习实例
Feb 10 Python
Pycharm取消py脚本中SQL识别的方法
Nov 29 Python
python使用pdfminer解析pdf文件的方法示例
Dec 20 Python
Python----数据预处理代码实例
Mar 20 Python
python如何实现单链表的反转
Feb 10 Python
python安装dlib库报错问题及解决方法
Mar 16 Python
Python实现密钥密码(加解密)实例详解
Apr 26 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
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
2013/06/29 PHP
PHP实现的MongoDB数据库操作类分享
2014/05/12 PHP
php保存二进制原始数据为图片的程序代码
2014/10/14 PHP
php curl发送请求实例方法
2019/08/01 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
使用Javascript和DOM Interfaces来处理HTML
2006/10/09 Javascript
javascript判断单选框或复选框是否选中方法集锦
2007/04/04 Javascript
jquery获取子节点和父节点的示例代码
2013/09/10 Javascript
含有CKEditor的表单如何提交
2014/01/09 Javascript
JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
2014/08/16 Javascript
Jquery 实现图片轮换
2015/01/28 Javascript
JS实现网页Div层Clone拖拽效果
2015/09/26 Javascript
php基于redis处理session的方法
2016/03/14 Javascript
AngularJS动态生成div的ID源码解析
2016/08/29 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图的组合双轴图效果示例【附demo源码下载】
2017/03/09 Javascript
Bootstrap表单制作代码
2017/03/17 Javascript
Vue绑定内联样式问题
2018/10/17 Javascript
详解Vue之父子组件传值
2019/04/01 Javascript
ES6的解构赋值实例详解
2019/05/06 Javascript
bootstrap table实现横向合并与纵向合并
2019/07/18 Javascript
[52:07]完美世界DOTA2联赛PWL S3 LBZS vs access 第二场 12.10
2020/12/13 DOTA
python 将json数据提取转化为txt的方法
2018/10/26 Python
Django给admin添加Action的步骤详解
2019/05/01 Python
django filter过滤器实现显示某个类型指定字段不同值方式
2020/07/16 Python
Python面试题:如何用Python来发送邮件
2016/03/15 面试题
老师推荐信
2013/10/28 职场文书
法律专业应届生自荐信范文
2014/01/06 职场文书
学习方法演讲稿
2014/05/10 职场文书
护理目标管理责任书
2014/07/25 职场文书
高中校园广播稿
2014/10/21 职场文书
党员群众路线教育实践活动学习笔记
2014/11/05 职场文书
会计出纳岗位职责
2015/03/31 职场文书
红白喜事主持词
2015/07/06 职场文书
高温慰问简报
2015/07/21 职场文书
跳高加油稿
2015/07/21 职场文书
解决Golang中goroutine执行速度的问题
2021/05/02 Golang