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 示例分享---逻辑推理编程解决八皇后
Jul 20 Python
Python通过解析网页实现看报程序的方法
Aug 04 Python
Python编程使用NLTK进行自然语言处理详解
Nov 16 Python
Python程序退出方式小结
Dec 09 Python
python自动化报告的输出用例详解
May 30 Python
对Python 内建函数和保留字详解
Oct 15 Python
python学生信息管理系统(初级版)
Oct 17 Python
python图像和办公文档处理总结
May 28 Python
Python中BeautifuSoup库的用法使用详解
Nov 15 Python
Pytorch 实现权重初始化
Dec 31 Python
在Python中字典按值排序的实现方法
Nov 12 Python
用Python简陋模拟n阶魔方
Apr 17 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版网站缓存加快打开速度的方法分享
2012/06/03 PHP
Laravel框架学习笔记(二)项目实战之模型(Models)
2014/10/15 PHP
php单一接口的实现方法
2015/06/20 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
2018/09/26 PHP
php7下的filesize函数
2019/09/30 PHP
jquery怎样实现ajax联动框(二)
2013/03/08 Javascript
js弹出模式对话框,并接收回传值的方法
2013/03/12 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
原生JavaScript实现滚动条效果
2020/03/24 Javascript
Function.prototype.apply()与Function.prototype.call()小结
2016/04/27 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
2016/09/28 Javascript
Form表单按回车自动提交表单的实现方法
2016/11/18 Javascript
JavaScript面试题(指针、帽子和女朋友)
2016/11/23 Javascript
jQuery实现用户输入自动完成功能
2017/02/13 Javascript
整理关于Bootstrap表单的慕课笔记
2017/03/29 Javascript
JavaScript上传文件时不用刷新页面方法总结(推荐)
2017/08/15 Javascript
vue动画之点击按钮往上渐渐显示出来的实例
2018/09/29 Javascript
微信小程序使用二次贝塞尔曲线画波浪
2018/12/25 Javascript
jQuery zTree插件快速实现目录树
2019/08/16 jQuery
详解element-ui级联菜单(城市三级联动菜单)和回显问题
2019/10/02 Javascript
vue中注册自定义的全局js方法
2019/11/15 Javascript
vue打开子组件弹窗都刷新功能的实现
2020/09/21 Javascript
vue如何使用rem适配
2021/02/06 Vue.js
Python生成随机数组的方法小结
2017/04/15 Python
Python实现快速计算词频功能示例
2018/06/25 Python
Python安装pycurl失败的解决方法
2018/10/15 Python
python sorted函数的小练习及解答
2019/09/18 Python
django有外键关系的两张表如何相互查找
2020/02/10 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
2020/12/21 Python
CSS3 Flex 弹性布局实例代码详解
2018/11/01 HTML / CSS
.NET面试问题集
2015/12/08 面试题
最新大学生自我评价
2013/09/24 职场文书
高考诚信考试承诺书
2015/04/29 职场文书
导游词之铁岭象牙山
2019/12/06 职场文书
利用Python实现翻译HTML中的文本字符串
2022/06/21 Python