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的Django框架中加载模版的方法
Jul 16 Python
Python画图学习入门教程
Jul 01 Python
对pandas中apply函数的用法详解
Apr 10 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
Jun 27 Python
Python3.5面向对象编程图文与实例详解
Apr 24 Python
Django使用redis缓存服务器的实现代码示例
Apr 28 Python
python 使用socket传输图片视频等文件的实现方式
Aug 07 Python
什么是python的id函数
Jun 11 Python
关于Python3爬虫利器Appium的安装步骤
Jul 29 Python
python实现AdaBoost算法的示例
Oct 03 Python
python进行二次方程式计算的实例讲解
Dec 06 Python
BeautifulSoup中find和find_all的使用详解
Dec 07 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 获取全局变量的代码
2011/04/21 PHP
php数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
2011/11/07 PHP
php设置页面超时时间解决方法
2015/09/22 PHP
基于thinkPHP实现的微信自定义分享功能示例
2016/09/23 PHP
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
模拟jQuery ajax服务器端与客户端通信的代码
2011/03/28 Javascript
解读JavaScript中 For, While与递归的用法
2013/05/07 Javascript
让jQuery Mobile不显示讨厌loading界面的方法
2014/02/19 Javascript
Javascript基础教程之变量
2015/01/18 Javascript
js实现TAB切换对应不同颜色的代码
2015/08/31 Javascript
jquery 实现回车登录详解及实例代码
2016/10/23 Javascript
对称加密与非对称加密优缺点详解
2017/02/06 Javascript
vue.js 左侧二级菜单显示与隐藏切换的实例代码
2017/05/23 Javascript
使用SVG基本操作API的实例讲解
2017/09/14 Javascript
vue.js 微信支付前端代码分享
2018/02/10 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
微信小程序如何调用json数据接口并解析
2019/06/29 Javascript
JS+DIV实现拖动效果
2020/02/11 Javascript
Node.js中出现未捕获异常的处理方法
2020/06/29 Javascript
Vite和Vue CLI的优劣
2021/01/30 Vue.js
[14:00]DOTA2国际邀请赛史上最长大战 赛后专访B神
2013/08/10 DOTA
[14:20]刀塔大凶女神互压各路奇葩屌丝
2014/05/16 DOTA
[19:14]DOTA2 HEROS教学视频教你分分钟做大人-维萨吉
2014/06/24 DOTA
[53:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第三场 1月18日
2021/03/11 DOTA
[01:32:50]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第一场 1月25日
2021/03/11 DOTA
python计算最小优先级队列代码分享
2013/12/18 Python
python映射列表实例分析
2015/01/26 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
2018/10/26 Python
Python 3.8 新功能来一波(大部分人都不知道)
2020/03/11 Python
苏格兰销售女装、男装和童装的连锁店:M&Co
2018/03/16 全球购物
通用求职信范文模板分享
2013/12/27 职场文书
给酒店员工的表扬信
2014/01/11 职场文书
银行开业庆典方案
2014/02/06 职场文书
《在大海中永生》教学反思
2014/02/24 职场文书
介绍信的写法
2015/01/31 职场文书
Java中使用Filter过滤器的方法
2021/06/28 Java/Android