浅谈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 控制语句
Nov 03 Python
关于Python元祖,列表,字典,集合的比较
Jan 06 Python
Python与R语言的简要对比
Nov 14 Python
PyQt5 在label显示的图片中绘制矩形的方法
Jun 17 Python
Python中面向对象你应该知道的一下知识
Jul 10 Python
Python生成词云的实现代码
Jan 14 Python
Python利用Xpath选择器爬取京东网商品信息
Jun 01 Python
浅谈sklearn中predict与predict_proba区别
Jun 28 Python
使用Keras训练好的.h5模型来测试一个实例
Jul 06 Python
python读取xml文件方法解析
Aug 04 Python
用sleep间隔进行python反爬虫的实例讲解
Nov 30 Python
Python实现生活常识解答机器人
Jun 28 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
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
2006/10/09 PHP
PHP中的integer类型使用分析
2010/07/27 PHP
第4章 数据处理-php数组的处理-郑阿奇
2011/07/04 PHP
php 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
PHP编写RESTful接口
2016/02/23 PHP
php添加数据到xml文件的简单例子
2016/09/08 PHP
php实现PDO中捕获SQL语句错误的方法
2017/02/16 PHP
无语,javascript居然支持中文(unicode)编程!
2007/04/12 Javascript
xml文档转换工具,附图表例子(hta)
2010/11/17 Javascript
jquery 学习之二 属性(类)
2010/11/25 Javascript
循环 vs 递归浅谈
2013/02/28 Javascript
extjs 如何给column 加上提示
2014/07/29 Javascript
Extjs4.0 ComboBox如何实现三级联动
2016/05/11 Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
2017/02/14 Javascript
Angular.js中处理页面闪烁的方法详解
2017/03/09 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
2017/07/12 jQuery
微信小程序实现简单跑马灯效果
2020/05/26 Javascript
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
2020/04/08 Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
2020/05/31 Javascript
[01:00:25]NB vs Secret 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
python实现可将字符转换成大写的tcp服务器实例
2015/04/29 Python
一篇文章入门Python生态系统(Python新手入门指导)
2015/12/11 Python
Python中矩阵库Numpy基本操作详解
2017/11/21 Python
python requests 测试代理ip是否生效
2018/07/25 Python
使用HTML5做个画图板的方法介绍
2013/05/03 HTML / CSS
HTML5实现可缩放时钟代码
2017/08/28 HTML / CSS
美国电力供应商店/电气批发商:USESI
2018/10/12 全球购物
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
联想印度官方网上商店:Lenovo India
2019/08/24 全球购物
什么是SCM(软件配置管理)
2014/08/16 面试题
护士自荐信
2013/10/25 职场文书
打架检讨书500字
2014/01/29 职场文书
2016新年年会主持词
2015/07/06 职场文书
如何在Python项目中引入日志
2021/05/31 Python
面试中canvas绘制图片模糊图片问题处理
2022/03/13 Javascript