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

 更新时间:2020年05月21日 11:14:08   作者:python_tty  
这篇文章主要介绍了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()

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

以上这篇Django 解决由save方法引发的错误就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 解决pytorch 模型复制的一些问题

    解决pytorch 模型复制的一些问题

    这篇文章主要介绍了解决pytorch 模型复制的一些问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • python爬虫基础之urllib的使用

    python爬虫基础之urllib的使用

    这篇文章主要介绍了python爬虫基础之urllib的使用,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-12-12
  • 举例区分Python中的浅复制与深复制

    举例区分Python中的浅复制与深复制

    这篇文章主要介绍了举例区分Python中的浅复制与深复制,是Python入门学习中的重要知识,需要的朋友可以参考下
    2015-07-07
  • Anaconda第三方库下载慢的解决方法

    Anaconda第三方库下载慢的解决方法

    本文主要介绍了Anaconda第三方库下载慢的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Python使用SocketServer模块编写基本服务器程序的教程

    Python使用SocketServer模块编写基本服务器程序的教程

    SocketServer模块中集成了实现socket通信服务器功能所需的各种类和方法,这里我们就来看一下Python使用SocketServer模块编写基本服务器程序的教程:
    2016-07-07
  • python安装cx_Oracle和wxPython的方法

    python安装cx_Oracle和wxPython的方法

    这篇文章主要介绍了python安装cx_Oracle和wxPython的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • 详解Python如何在终端打印字体颜色

    详解Python如何在终端打印字体颜色

    日常开发中,海量的信息堆砌在控制台中,就会导致各种信息都显示在一起,降低了重要信息的可读性。这时候,如果能给重要的信息加上差异的字体颜色,那么就会更加显眼。本文将介绍Python实现终端打印字体颜色的方法,需要的可以了解一下
    2022-10-10
  • Python Requests访问网络更方便

    Python Requests访问网络更方便

    这篇文章主要介绍了使用Python Requests访问网络,Python Requests 是一个非常强大的 HTTP 客户端库,用于发送 HTTP 请求,获取响应等操作,通过这个库,你可以轻松地与 Web 服务进行交互,实现各种网络请求
    2024-01-01
  • Django中使用group_by的方法

    Django中使用group_by的方法

    这篇文章主要介绍了Django中使用group_by的方法,实例分析了在Django中使用group_by语句的相关技巧,需要的朋友可以参考下
    2015-05-05
  • Python tkinter制作单机五子棋游戏

    Python tkinter制作单机五子棋游戏

    这篇文章主要介绍了Python tkinter制作单机五子棋游戏,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09

最新评论