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脚本实现格式化css文件
Apr 08 Python
Python实现识别手写数字大纲
Jan 29 Python
python如何修改装饰器中参数
Mar 20 Python
python 矩阵增加一行或一列的实例
Apr 04 Python
详解django2中关于时间处理策略
Mar 06 Python
python批量修改文件夹及其子文件夹下的文件内容
Mar 15 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
Aug 24 Python
Python OrderedDict的使用案例解析
Oct 25 Python
使用matplotlib绘制图例标签中带有公式的图
Dec 13 Python
解决Keras中CNN输入维度报错问题
Jun 29 Python
Python request post上传文件常见要点
Nov 20 Python
Python实现单例模式的5种方法
Jun 15 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/04 星际争霸
基于文本的搜索
2006/10/09 PHP
深入php var_dump()函数的详解
2013/06/05 PHP
10个超级有用值得收藏的PHP代码片段
2015/01/22 PHP
php常用日期时间函数实例小结
2019/07/04 PHP
Yii框架where查询用法实例分析
2019/10/22 PHP
让div层随鼠标移动的实现代码 ie ff
2009/12/18 Javascript
Javascript 判断是否存在函数的方法
2013/01/03 Javascript
getComputedStyle与currentStyle获取样式(style/class)
2013/03/19 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
2014/06/09 Javascript
AngularJs Forms详解及简单示例
2016/09/01 Javascript
JavaScript制作简单分页插件
2016/09/11 Javascript
JS优化与惰性载入函数实例分析
2017/04/06 Javascript
vue+Java后端进行调试时解决跨域问题的方式
2017/10/19 Javascript
vue 自定义指令自动获取文本框焦点的方法
2018/08/25 Javascript
vue动态绑定class选中当前列表变色的方法示例
2018/12/19 Javascript
vue项目首屏加载时间优化实战
2019/04/23 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
2019/09/23 Javascript
javascript实现文字跑马灯效果
2020/06/18 Javascript
js实现点击烟花特效
2020/10/14 Javascript
[44:01]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS paiN
2018/03/31 DOTA
python查找第k小元素代码分享
2013/12/18 Python
使用PDB简单调试Python程序简明指南
2015/04/25 Python
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
django中账号密码验证登陆功能的实现方法
2019/07/15 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
2019/08/20 Python
django从后台返回html代码的实例
2020/03/11 Python
python使用smtplib模块发送邮件
2020/12/17 Python
css3一款3D字体带阴影效果的实现步骤
2013/03/20 HTML / CSS
Soft Cotton捷克:来自爱琴海棉花的浴袍
2017/02/01 全球购物
应用化学专业职业生涯规划书
2013/12/31 职场文书
保安拾金不昧表扬信
2014/01/15 职场文书
租房协议书范本
2014/04/09 职场文书
营运督导岗位职责
2015/04/10 职场文书
css 边框添加四个角的实现代码
2021/10/16 HTML / CSS
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技