Django 解决由save方法引发的错误

作者:python_tty 时间:2022-04-07 06:06:56 

最近项目中的资产的任务状态频频出现问题,查看日志文件,看代码逻辑,也没发现什么具体的错误,总是过段时间就会出现一个表的字段没有更新的问题,很头疼。

开始时,觉得是没有添加事务,所以同时更新两个不同的表,其中一个表的内容没有写进去;加了事务后,又出现这种问题。

后来看代码,发现有两个线程在同一时间先后修改同一个表,问题来了,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()

通过这样的方法,我们就可以保存到数据库了。

来源:https://blog.csdn.net/python_tty/article/details/53081843

标签:Django,save,错误
0
投稿

猜你喜欢

  • 网页设计的十要十不要

    2007-12-21 13:01:00
  • Python 递归式实现二叉树前序,中序,后序遍历

    2022-09-22 17:38:32
  • [ASP]利用 xmlhttp 分块上传文件

    2008-07-04 14:14:00
  • MySQL配置文件my.cnf中文版

    2011-09-30 11:06:15
  • 网站tab导航的设计

    2008-11-10 12:36:00
  • 火狐浏览器:浏览数据新方式(附模拟图)[译]

    2009-04-23 10:51:00
  • 教你用python实现12306余票查询

    2021-03-16 01:39:19
  • js表单验证控制代码大全

    2010-03-07 14:25:00
  • python return实现汇率转换器教程示例

    2023-11-10 12:39:50
  • python开发之基于thread线程搜索本地文件的方法

    2023-05-11 18:49:12
  • Python设计模式行为型责任链模式

    2021-08-15 05:58:16
  • php基础教程 php内置函数实例教程

    2023-11-14 18:28:45
  • 对python字典元素的添加与修改方法详解

    2023-10-19 09:36:04
  • 简单理解Python中的装饰器

    2021-06-18 01:44:21
  • matplotlib基本图形绘制操作实例

    2023-07-14 18:18:01
  • Javascript 小游戏,“是男人坚持 100 次”

    2009-01-22 14:25:00
  • python使用参数对嵌套字典进行取值的方法

    2022-04-12 10:13:27
  • Python 数据可视化实现5种炫酷的动态图

    2023-07-22 10:46:14
  • ASP脚本循环语句

    2009-02-19 13:34:00
  • Python批量修改xml的坐标值全部转为整数的实例代码

    2021-10-29 00:57:50
  • asp之家 网络编程 m.aspxhome.com