浅谈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多重继承新算法C3介绍
Sep 28 Python
使用Python编写vim插件的简单示例
Apr 17 Python
详解Python3操作Mongodb简明易懂教程
May 25 Python
对python中的logger模块全面讲解
Apr 28 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
Jan 29 Python
python 调用钉钉机器人的方法
Feb 20 Python
Python中变量的输入输出实例代码详解
Jul 28 Python
python 模拟贷款卡号生成规则过程解析
Aug 30 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
Dec 19 Python
三个python爬虫项目实例代码
Dec 28 Python
浅析pandas随机排列与随机抽样
Jan 22 Python
python编程简单几行代码实现视频转换Gif示例
Oct 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
简单易用的计数器(数据库)
2006/10/09 PHP
php合并数组array_merge函数运算符加号与的区别
2008/10/31 PHP
支持生僻字且自动识别utf-8编码的php汉字转拼音类
2014/06/27 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
2015/04/17 PHP
thinkphp5使用无限极分类
2019/02/18 PHP
jQuery 位置插件
2008/12/25 Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
2013/07/13 Javascript
Node.js的特点和应用场景介绍
2014/11/04 Javascript
js实现文字闪烁特效的方法
2015/12/17 Javascript
jQuery简单实现彩色云标签效果示例
2016/08/01 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
微信小程序 欢迎页面的制作(源码下载)
2017/01/09 Javascript
JS 组件系列之 bootstrap treegrid 组件封装过程
2017/04/28 Javascript
React Native预设占位placeholder的使用
2017/09/28 Javascript
在React 组件中使用Echarts的示例代码
2017/11/08 Javascript
php中and 和 &&出坑指南
2018/07/13 Javascript
angular的输入和输出的使用方法
2018/09/22 Javascript
简单的React SSR服务器渲染实现
2018/12/11 Javascript
Python中的闭包总结
2014/09/18 Python
《Python之禅》中对于Python编程过程中的一些建议
2015/04/03 Python
编写Python的web框架中的Model的教程
2015/04/29 Python
Python中getpass模块无回显输入源码解析
2018/01/11 Python
python调用tcpdump抓包过滤的方法
2018/07/18 Python
PyTorch-GPU加速实例
2020/06/23 Python
求职信内容考虑哪几点
2013/10/05 职场文书
英文自荐信
2013/12/15 职场文书
采购类个人求职的自我评价
2014/02/18 职场文书
艺术学院毕业生自我评价
2014/03/02 职场文书
大学生心理活动总结
2014/07/04 职场文书
开发房地产协议书
2014/09/14 职场文书
房屋租赁协议书(标准版)
2014/10/02 职场文书
总经理致辞
2015/07/29 职场文书
PyTorch 如何自动计算梯度
2021/05/23 Python
JavaScript流程控制(循环)
2021/12/06 Javascript
MySQL笔记 —SQL运算符
2022/01/18 MySQL
Java实现经典游戏泡泡堂的示例代码
2022/04/04 Java/Android