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中请使用isinstance()判断变量类型
Aug 25 Python
python使用datetime模块计算各种时间间隔的方法
Mar 24 Python
Python实现豆瓣图片下载的方法
May 25 Python
python实现多线程抓取知乎用户
Dec 12 Python
python3使用SMTP发送HTML格式邮件
Jun 19 Python
在Python中居然可以定义两个同名通参数的函数
Jan 31 Python
Python3批量生成带logo的二维码方法
Jun 24 Python
Numpy中对向量、矩阵的使用详解
Oct 29 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
Feb 10 Python
Django 自定义权限管理系统详解(通过中间件认证)
Mar 11 Python
Python 使用双重循环打印图形菱形操作
Aug 09 Python
教你利用python实现企业微信发送消息
May 23 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学习之PHP表达式
2006/10/09 PHP
php使用curl模拟登录后采集页面的例子
2013/11/04 PHP
Destoon旺旺无法正常显示,点击提示“会员名不存在”的解决办法
2014/06/21 PHP
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
js 获取和设置css3 属性值的实现方法
2013/05/06 Javascript
JS实现静止元素自动移动示例
2014/04/14 Javascript
完美兼容各大浏览器的jQuery仿新浪图文淡入淡出间歇滚动特效
2014/11/12 Javascript
javascript实现依次输入input自动定焦
2014/12/23 Javascript
深入理解vue.js双向绑定的实现原理
2016/12/05 Javascript
JavaScript实现向select下拉框中添加和删除元素的方法
2017/03/07 Javascript
JavaScript实现选中文字提示新浪微博分享效果
2017/06/15 Javascript
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
vue嵌套路由与404重定向实现方法分析
2018/05/04 Javascript
动态内存分配导致影响Javascript性能的问题
2018/12/18 Javascript
jquery实现Ajax请求的几种常见方式总结
2019/05/28 jQuery
JS随机密码生成算法
2019/09/23 Javascript
基于html+css+js实现简易计算器代码实例
2020/02/28 Javascript
json_decode 索引为数字时自动排序问题解决方法
2020/03/28 Javascript
vue与iframe之间的信息交互的实现
2020/04/08 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
Python素数检测实例分析
2015/06/15 Python
获取python的list中含有重复值的index方法
2018/06/27 Python
检测python爬虫时是否代理ip伪装成功的方法
2019/07/12 Python
详解PyTorch手写数字识别(MNIST数据集)
2019/08/16 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
2019/08/24 Python
python默认参数调用方法解析
2020/02/09 Python
PyQt5结合matplotlib绘图的实现示例
2020/09/15 Python
萨克斯第五大道的折扣店:Saks Fifth Avenue OFF 5TH
2016/08/25 全球购物
Darphin迪梵官网: 来自巴黎,植物和精油调制的护肤品牌
2016/10/11 全球购物
会计学财务管理专业个人的自我评价
2013/10/19 职场文书
搞笑获奖感言
2014/01/30 职场文书
简历中的自我评价范文
2014/02/05 职场文书
幼儿园辞职书
2015/02/26 职场文书
有关浪费资源的建议书
2015/09/14 职场文书
朋友圈早安励志语录!
2019/07/08 职场文书
大学生,三分钟即兴演讲稿
2019/07/22 职场文书