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
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
网页设计的十要十不要
Python 递归式实现二叉树前序,中序,后序遍历
![](https://img.aspxhome.com/file/2023/7/66777_0s.png)
[ASP]利用 xmlhttp 分块上传文件
MySQL配置文件my.cnf中文版
网站tab导航的设计
![](https://img.aspxhome.com/file/UploadPic/200811/10/tab1-53s.jpg)
火狐浏览器:浏览数据新方式(附模拟图)[译]
![](https://img.aspxhome.com/file/UploadPic/20094/23/faaborg-49s.jpg)
教你用python实现12306余票查询
![](https://img.aspxhome.com/file/2023/7/75167_0s.png)
js表单验证控制代码大全
python return实现汇率转换器教程示例
![](https://img.aspxhome.com/file/2023/3/63623_0s.png)
python开发之基于thread线程搜索本地文件的方法
![](https://img.aspxhome.com/file/2023/6/65456_0s.png)
Python设计模式行为型责任链模式
![](https://img.aspxhome.com/file/2023/2/77012_0s.png)
php基础教程 php内置函数实例教程
对python字典元素的添加与修改方法详解
简单理解Python中的装饰器
matplotlib基本图形绘制操作实例
![](https://img.aspxhome.com/file/2023/1/64231_0s.png)
Javascript 小游戏,“是男人坚持 100 次”
![](https://img.aspxhome.com/file/UploadPic/20091/22/medium-44s.jpg)
python使用参数对嵌套字典进行取值的方法
Python 数据可视化实现5种炫酷的动态图
![](https://img.aspxhome.com/file/2023/4/76904_0s.gif)
ASP脚本循环语句
Python批量修改xml的坐标值全部转为整数的实例代码
![](https://img.aspxhome.com/file/2023/8/65548_0s.jpg)