浅谈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中每次处理一个字符的5种方法
May 21 Python
Python socket编程实例详解
May 27 Python
Python 类的继承实例详解
Mar 25 Python
学习Python selenium自动化网页抓取器
Jan 20 Python
Python中创建二维数组
Oct 17 Python
python使用PIL实现多张图片垂直合并
Jan 15 Python
Python切片操作去除字符串首尾的空格
Apr 22 Python
使用python对多个txt文件中的数据进行筛选的方法
Jul 10 Python
python hough变换检测直线的实现方法
Jul 12 Python
在pycharm中为项目导入anacodna环境的操作方法
Feb 12 Python
使用PyQt5实现图片查看器的示例代码
Apr 21 Python
Python Selenium异常处理的实例分析
Feb 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
十天学会php之第一天
2006/10/09 PHP
PHP实现下载功能的代码
2012/09/29 PHP
10个值得深思的PHP面试题
2016/11/14 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
PHP设计模式之工厂方法设计模式实例分析
2018/04/25 PHP
laravel 中某一字段自增、自减的例子
2019/10/11 PHP
Mootools 1.2教程 正则表达式
2009/09/15 Javascript
js渐变显示渐变消失示例代码
2013/08/01 Javascript
解释&&和||在javascript中的另类用法
2014/07/28 Javascript
js封装可使用的构造函数继承用法分析
2015/01/28 Javascript
javascript html5 canvas实现可拖动省份的中国地图
2016/03/11 Javascript
BootStrap实现树形目录组件代码详解
2016/06/21 Javascript
Vue.js实现简单ToDoList 前期准备(一)
2016/12/01 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
JS使用正则表达式找出最长连续子串长度
2017/10/26 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
2018/01/08 Javascript
vuex state及mapState的基础用法详解
2018/04/19 Javascript
layer.open 按钮的点击事件关闭方法
2018/08/17 Javascript
vue根据值给予不同class的实例
2018/09/29 Javascript
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
Python操作Excel之xlsx文件
2017/03/24 Python
小白如何入门Python? 制作一个网站为例
2018/03/06 Python
python字典快速保存于读取的方法
2018/03/23 Python
解决python 3 urllib 没有 urlencode 属性的问题
2019/08/22 Python
Python学习之路之pycharm的第一个项目搭建过程
2020/06/18 Python
python中@property的作用和getter setter的解释
2020/12/22 Python
CSS3打造磨砂玻璃背景效果
2016/09/28 HTML / CSS
html5实现多文件的上传示例代码
2014/02/13 HTML / CSS
Stio官网:男女、儿童户外服装
2019/12/13 全球购物
餐饮主管岗位职责
2013/12/10 职场文书
银行个人求职自荐信范文
2013/12/16 职场文书
课程改革实施方案
2014/03/16 职场文书
开展读书活动总结
2014/06/30 职场文书
教师党员个人自我剖析材料
2014/09/29 职场文书
4S店客服专员岗位职责
2015/04/07 职场文书
python文件名批量重命名脚本实例代码
2021/04/22 Python