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和shell变量互相传递的几种方法
Nov 20 Python
python海龟绘图实例教程
Jul 24 Python
Python解析树及树的遍历
Feb 03 Python
Python+matplotlib实现填充螺旋实例
Jan 15 Python
python 把文件中的每一行以数组的元素放入数组中的方法
Apr 29 Python
修复 Django migration 时遇到的问题解决
Jun 14 Python
Python3内置模块pprint让打印比print更美观详解
Jun 02 Python
基于pytorch的lstm参数使用详解
Jan 14 Python
Python中的wordcloud库安装问题及解决方法
May 27 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
Nov 25 Python
浅谈Python 中的复数问题
May 19 Python
使用python求解迷宫问题的三种实现方法
Mar 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创建多级目录的方法
2015/03/24 PHP
PHP中filter函数校验数据的方法详解
2015/07/31 PHP
PHP程序中使用adodb连接不同数据库的代码实例
2015/12/19 PHP
javascript高亮效果的二种实现方法
2008/09/14 Javascript
JavaScript Konami Code 实现代码
2009/07/29 Javascript
JavaScript 全角转半角部分
2009/10/28 Javascript
javascript获取隐藏dom的宽高 具体实现
2013/07/14 Javascript
JS获取鼠标坐标的实例方法
2013/07/18 Javascript
使用jquery修改表单的提交地址基本思路
2014/06/04 Javascript
jQuery之Deferred对象详解
2014/09/04 Javascript
JavaScript对数字的判断与处理实例分析
2015/02/02 Javascript
举例说明如何为JavaScript的方法参数设置默认值
2015/11/17 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
AngularJS之依赖注入模拟实现
2016/08/19 Javascript
WEB开发之注册页面验证码倒计时代码的实现
2016/12/15 Javascript
深入理解React Native原生模块与JS模块通信的几种方式
2017/07/24 Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
2018/05/21 Javascript
详解如何给React-Router添加路由页面切换时的过渡动画
2019/04/25 Javascript
微信小程序使用 vant Dialog组件的正确方式
2020/02/21 Javascript
浅析Python基础-流程控制
2016/03/18 Python
详解Python安装scrapy的正确姿势
2018/06/26 Python
对python GUI实现完美进度条的示例详解
2018/12/13 Python
让你的Python代码实现类型提示功能
2019/11/19 Python
Python文本文件的合并操作方法代码实例
2020/03/31 Python
pycharm 2020 1.1的安装流程
2020/09/29 Python
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
详解如何在登录过期后跳出Ifram框架
2020/09/10 HTML / CSS
美国从事品牌鞋类零售的连锁店:Famous Footwear
2016/08/25 全球购物
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
车间工艺员岗位职责
2013/12/09 职场文书
销售员岗位职责范本
2014/02/03 职场文书
党章培训心得体会
2014/09/04 职场文书
惊天动地观后感
2015/06/10 职场文书
2016暑期校本培训心得体会
2016/01/08 职场文书
2016习总书记系列重要讲话心得体会
2016/01/15 职场文书