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中的描述符(descriptor)
Jun 03 Python
django 发送邮件和缓存的实现代码
Jul 18 Python
python解压TAR文件至指定文件夹的实例
Jun 10 Python
python基于json文件实现的gearman任务自动重启代码实例
Aug 13 Python
利用Python的turtle库绘制玫瑰教程
Nov 23 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
Nov 29 Python
Python数据持久化存储实现方法分析
Dec 21 Python
PyCharm使用Docker镜像搭建Python开发环境
Dec 26 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
Feb 28 Python
TensorFlow实现批量归一化操作的示例
Apr 22 Python
基于python实现删除指定文件类型
Jul 21 Python
python 实现图片裁剪小工具
Feb 02 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中sql注入漏洞示例 sql注入漏洞修复
2014/01/24 PHP
php输出指定时间以前时间格式的方法
2015/03/21 PHP
基于jquery的地址栏射击游戏代码
2011/03/10 Javascript
Enter转换为Tab的小例子(兼容IE,Firefox)
2013/11/14 Javascript
js拼接html注意问题示例探讨
2014/07/14 Javascript
jQuery获得包含margin的outerWidth和outerHeight的方法
2015/03/25 Javascript
基于JavaScript将表单序列化类型的数据转化成对象的处理(允许对象中包含对象)
2015/12/28 Javascript
JavaScript中split与join函数的进阶使用技巧
2016/05/03 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
2016/10/17 Javascript
解析js如何获取css样式
2016/12/11 Javascript
jQuery 常见小例汇总
2016/12/14 Javascript
jQuery实用密码强度检测
2017/03/02 Javascript
ES6中let 和 const 的新特性
2018/09/03 Javascript
微信小程序实现选项卡滑动切换
2020/10/22 Javascript
[03:34]2014DOTA2西雅图国际邀请赛 淘汰赛7月15日TOPPLAY
2014/07/15 DOTA
[01:14:55]EG vs Spirit Supermajor 败者组 BO3 第三场 6.4
2018/06/05 DOTA
python 全局变量的import机制介绍
2017/09/07 Python
Python基于高斯消元法计算线性方程组示例
2018/01/17 Python
Python浅复制中对象生存周期实例分析
2018/04/02 Python
python验证身份证信息实例代码
2019/05/06 Python
Django框架中序列化和反序列化的例子
2019/08/06 Python
python3实现带多张图片、附件的邮件发送
2019/08/10 Python
Python 实现黑客帝国中的字符雨的示例代码
2020/02/20 Python
python函数enumerate,operator和Counter使用技巧实例小结
2020/02/22 Python
django从后台返回html代码的实例
2020/03/11 Python
opencv 图像轮廓的实现示例
2020/07/08 Python
详解Flask前后端分离项目案例
2020/07/24 Python
草莓网化妆品澳大利亚站:Strawberrynet AU
2017/12/18 全球购物
下面关于"联合"的题目的输出是什么
2013/08/06 面试题
大学生迟到检讨书500字
2014/10/17 职场文书
国际贸易实务实训报告
2014/11/05 职场文书
2015年宣传思想工作总结
2015/05/22 职场文书
纪委立案决定书
2015/06/24 职场文书
小学数学新课改心得体会
2016/01/22 职场文书
Pytorch distributed 多卡并行载入模型操作
2021/06/05 Python
阿里云 Windows server 2019 配置FTP
2022/04/28 Servers