浅谈django 模型类使用save()方法的好处与注意事项


Posted in Python onMarch 28, 2020

如下所示:

def user_degree(self):
  degree = self.user.update_grade()
  return degree

def save(self, *args, **kwargs):
  self.degree = self.user_degree()
  self.p1_user = self.get_p1()
  self.p2_user = self.get_second()
  self.p3_user = self.get_third()
  self.first_get_money = self.get_first_commission()
  self.second_get_money = self.get_seconds()
  self.third_get_money = self.get_thirds()
  self.off_price = self.offPrice()
  self.need_pay = self.needPay()
  self.sale_push_money = self.per_sale_money()
  super(self.__class__, self).save(*args, **kwargs)

在django 的模型类里,如果有些字段的值是需要动态生成的,那么就在模型类里同样添加上对应的字段,并写上对应的方法,

然后调用save()方法,把自定义的方法的结果返回给那个字段,然后保存起来。

如果有多个相关联的字段都需要动态生成,那么在save()方法里的顺序就非常重要了,

譬如上面的off_price,need_pay, sale_push_money这三个字段动态生成的值是有先后关系的,顺序错了,有些生成的结果就不对了。所以一定要注意。

下面情况如果遇到时再参考即可,表达有点乱,没有遇到这种情况的可能会感觉莫名其妙,重点是红色字体部分

同时,这样动态填充避免了在字段中设置外键的弊端(当外键对应的字段值发生变化时,此模型类里已经记录的数据也可能会受到影响,)

尤其是需要记录消费信息时,会员的身份变化时,对应的折扣不一样,当会员身份升级时,如果消费记录只是在list页面用方法展示结果,没有使用save()将其填充到

对应的字段,就会使消费记录因为关联性而发生不希望的变动。

补充知识: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使用Queue在多个子进程间交换数据的方法
Apr 18 Python
详解Python中for循环是如何工作的
Jun 30 Python
Python requests库用法实例详解
Aug 14 Python
python: 判断tuple、list、dict是否为空的方法
Oct 22 Python
pytorch对可变长度序列的处理方法详解
Dec 08 Python
对Python Pexpect 模块的使用说明详解
Feb 14 Python
Python 200行代码实现一个滑动验证码过程详解
Jul 11 Python
Python实现网页截图(PyQT5)过程解析
Aug 12 Python
Python计算不规则图形面积算法实现解析
Nov 22 Python
python计算无向图节点度的实例代码
Nov 22 Python
python opencv图片编码为h264文件的实例
Dec 12 Python
以SQLite和PySqlite为例来学习Python DB API
Feb 05 Python
Django 实现对已存在的model进行更改
Mar 28 #Python
浅谈Django QuerySet对象(模型.objects)的常用方法
Mar 28 #Python
django使用F方法更新一个对象多个对象字段的实现
Mar 28 #Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
Mar 28 #Python
使用Django实现把两个模型类的数据聚合在一起
Mar 28 #Python
使用python客户端访问impala的操作方式
Mar 28 #Python
python 安装impala包步骤
Mar 28 #Python
You might like
颠覆常识!无色透明的咖啡诞生了(中日双语)
2021/03/03 咖啡文化
php 方便水印和缩略图的图形类
2009/05/21 PHP
redis 队列操作的例子(php)
2012/04/12 PHP
C# WinForm中实现快捷键自定义设置实例
2015/01/23 PHP
PHP中遍历数组的三种常用方法实例分析
2019/06/24 PHP
扩展String功能方法
2006/09/22 Javascript
jQuery autocomplete插件修改
2009/04/17 Javascript
js类型检查实现代码
2010/10/29 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
js+CSS实现弹出居中背景半透明div层的方法
2015/02/26 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
2015/07/17 Javascript
jQuery验证插件validate使用方法详解
2020/09/13 Javascript
jQuery 3.0中存在问题及解决办法
2016/07/15 Javascript
详解nodejs 文本操作模块-fs模块(四)
2016/12/22 NodeJs
微信小程序 template模板详解及实例代码
2017/03/09 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
2018/04/23 Javascript
微信小程序实现图片上传放大预览删除代码
2020/06/28 Javascript
微信小程序云开发之数据库操作
2019/05/18 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
2019/11/07 Javascript
vue+iview实现分页及查询功能
2020/11/17 Vue.js
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
Python WSGI的深入理解
2018/08/01 Python
浅谈python实现Google翻译PDF,解决换行的问题
2018/11/28 Python
python基于itchat模块实现微信防撤回
2019/04/29 Python
python+webdriver自动化环境搭建步骤详解
2019/06/03 Python
使用python socket分发大文件的实现方法
2019/07/08 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
使用 Supervisor 监控 Python3 进程方式
2019/12/05 Python
Python Tornado批量上传图片并显示功能
2020/03/26 Python
基于css3实现漂亮便签样式
2013/03/18 HTML / CSS
HTML5中的进度条progress元素简介及兼容性处理
2016/06/02 HTML / CSS
详解Html5 监听拦截Android返回键方法
2018/04/18 HTML / CSS
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
学生保证书
2015/01/16 职场文书
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL