浅谈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实现根据指定端口探测服务器/模块部署的方法
Aug 25 Python
Python使用shelve模块实现简单数据存储的方法
May 20 Python
python导入csv文件出现SyntaxError问题分析
Dec 15 Python
详解tensorflow载入数据的三种方式
Apr 24 Python
python实现内存监控系统
Mar 07 Python
python输出100以内的质数与合数实例代码
Jul 08 Python
在mac下查找python包存放路径site-packages的实现方法
Nov 06 Python
基于python实现名片管理系统
Nov 30 Python
使用python打印十行杨辉三角过程详解
Jul 10 Python
PyTorch预训练的实现
Sep 18 Python
django实现类似触发器的功能
Nov 15 Python
python数字类型和占位符详情
Mar 13 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
php生成二维码
2015/08/10 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
2016/08/11 PHP
PHP版单点登陆实现方案的实例
2016/11/17 PHP
PHP使用CURL实现下载文件功能示例
2019/06/03 PHP
Yii实现微信公众号场景二维码的方法实例
2020/08/30 PHP
google地图的路线实现代码
2009/08/20 Javascript
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
2012/01/04 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
php和js对数据库图片进行等比缩放示例
2014/04/28 Javascript
Node.js测试中的Mock文件系统详解
2016/11/21 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
vue服务端渲染的实例代码
2017/08/28 Javascript
微信小程序实现animation动画
2018/01/26 Javascript
用JS实现根据当前时间随机生成流水号或者订单号
2018/05/31 Javascript
使用layer弹窗和layui表单实现新增功能
2018/08/09 Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
2019/07/25 Javascript
js原生map实现的方法总结
2020/01/19 Javascript
jQuery实现计算器功能
2020/10/19 jQuery
Javascript 模拟mvc实现点餐程序案例详解
2020/12/24 Javascript
[01:14]DOTA2亚洲邀请赛小组赛赛前花絮
2017/03/27 DOTA
python实现文本去重且不打乱原本顺序
2016/01/26 Python
python数据结构链表之单向链表(实例讲解)
2017/07/25 Python
Python排序搜索基本算法之插入排序实例分析
2017/12/11 Python
浅谈Django学习migrate和makemigrations的差别
2018/01/18 Python
Python创建字典的八种方式
2019/02/27 Python
详解小白之KMP算法及python实现
2019/04/04 Python
Python对象转换为json的方法步骤
2019/04/25 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
2019/08/02 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
2021/01/23 Python
C#笔试题和英文面试题
2013/02/07 面试题
毕业生就业推荐信范文
2013/12/01 职场文书
《再见了,亲人》教学反思
2014/02/26 职场文书
最美乡村医生事迹材料
2014/06/02 职场文书
大三学生学年自我鉴定
2014/09/12 职场文书
导游词怎么写
2015/02/04 职场文书
Python列表删除重复元素与图像相似度判断及删除实例代码
2021/05/07 Python