网络编程
位置:首页>> 网络编程>> Python编程>> Django 解决由save方法引发的错误

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

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

标签:Django,save,错误

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

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

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

0
投稿

猜你喜欢

  • 这篇论坛文章(赛迪网技术社区)主要介绍了一种简单的MySQL数据库安装方法,详细内容请大家参考下文:虽然安装MySQL数据库的文章很多,但是
  • 本文实例讲述了JS实现仿Windows经典风格的选项卡Tab切换代码。分享给大家供大家参考,具体如下:这款仿Windows风格的选项卡,带有
  • 什么是 YARPYARP (另一个反向代理) 设计为一个库,提供核心代理功能,你可以根据应用程序的特定需求进行自定义。YARP 是使用 .N
  • 在今天的设计中,排版常常被忽视,特别是被网页设计师忽视。这真是件遗憾的事情因为CSS可以做很多事情来控制我们的排版。也就是说,我们被局限于某
  • 1 、创建一个django项目使用django-admin.py startproject MyDjangoSite 参考这里2、建立视图f
  • 可以实现,下面我们就来做一个检测一个字符串在另一个字符串当中出现几次的函数:入口参数:TheChar="要检测的字符串"
  • 声明,本文中所称CSS雪碧即为CSS Sprites,这个词组一直没有一个固定或者约定俗成的中文翻译,一些人开始称之为CSS雪碧,我们且当作
  • 有些页面并不能直接用requests获取到内容,会动态执行一些js代码生成内容。这个文章主要是对付那些特殊页面的,比如必须要进行js调用才能
  • 这是一篇关于怎样精简代码和Asp 特征以获得最快执行速度的详细文章。对于一个急燥的用户来说,任何在按下用户按钮到结果出现在它们的屏幕之间的延
  • 本文以修改用户名密码单元为案例,编写测试脚本。完成修改用户名密码模块单元测试。(ps.这个demo中登陆密码为“admin”)1. 打开浏览
  • 神经网络一般用GPU来跑,我们的神经网络框架一般也都安装的GPU版本,本文就简单记录一下GPU使用的编写。GPU的设置不在model,而是在
  • 前言:任何一个编程者都少不了要去调试代码,不管你是高手还是菜鸟,调试程序都是一项必不可少的工作。一般来说调试程序是在编写代码之后或测试期修改
  • 求3721,163,1,4832,1980,2008,68686688,9999,17173,5173,8848中最大的数明白后,试着求一下
  • 今天小池提出一个问题讨论,如何使分页做的更友好。做了一些调研和思考,做了些总结。分页在电商网站3级页、搜索结果页面等信息量大的页面是很重要的
  • © 版权符号显示不清楚,就是那个圈C,在某些网站上就是显示太小,看不清楚。一开始还以为是字体大小的原因,调大以后,还是一样
  • 【作者翻译】结构和层次降低了复杂性并提高了可读性。你的文章或站点组织的越深入,用户就越容易理解你观点和得到你想传达的信息。在网页上,这点被通
  • 它在Lynx里也会运行得很好:<%@ Language=VBScript %><HTML><
  • 环境:pyecharts库,echarts-countries-pypkg,echarts-china-provinces-pypkg,ec
  • 使用xmlhttp中的getResponseHeader 从响应信息中获取指定的http头strValue = oXML
  • Function getIpvalue(clientIP)'得到客户端的IP转换成长整型,返回值getIpvalue&nb
手机版 网络编程 asp之家 www.aspxhome.com