浅谈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中的__getitem__专有方法
Jun 27 Python
python 实现上传图片并预览的3种方法(推荐)
Jul 14 Python
Python编程把二叉树打印成多行代码
Jan 04 Python
关于django 数据库迁移(migrate)应该知道的一些事
May 27 Python
Django migrations 默认目录修改的方法教程
Sep 28 Python
Python时间和字符串转换操作实例分析
Mar 16 Python
Python实现Linux监控的方法
May 16 Python
Python 定义只读属性的实现方式
Mar 05 Python
python中rb含义理解
Jun 18 Python
django跳转页面传参的实现
Sep 17 Python
Python list和str互转的实现示例
Nov 16 Python
Python图像处理库PIL详细使用说明
Apr 06 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迅雷、快车、旋风下载专用链转换代码
2010/06/15 PHP
PHP开发中AJAX技术的简单应用
2015/12/11 PHP
Yii2框架dropDownList下拉菜单用法实例分析
2016/07/18 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
2016/12/15 PHP
CI框架实现框架前后端分离的方法详解
2016/12/30 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
扩展javascript的Date方法实现代码(prototype)
2010/11/20 Javascript
让js弹出窗口居前显示的实现方法
2013/07/10 Javascript
javascript解析json数据的3种方式
2014/05/08 Javascript
jQuery实现contains方法不区分大小写的方法
2015/02/13 Javascript
JavaScript模块化开发之SeaJS
2015/12/13 Javascript
JavaScript的设计模式经典之代理模式
2016/02/24 Javascript
通过bootstrap全面学习less
2016/11/09 Javascript
vue实现列表的添加点击
2016/12/29 Javascript
JavaScript表单即时验证 验证不成功不能提交
2017/08/31 Javascript
Vue 项目代理设置的优化
2018/04/17 Javascript
微信小程序实现红包雨功能
2018/07/11 Javascript
浅谈目前可以使用ES10的5个新特性
2019/06/25 Javascript
layui select 禁止点击的实现方法
2019/09/05 Javascript
python实现按行切分文本文件的方法
2016/04/18 Python
深入理解python中的闭包和装饰器
2016/06/12 Python
浅谈Python中的可变对象和不可变对象
2017/07/07 Python
Python单例模式的两种实现方法
2017/08/14 Python
Python入门学习指南分享
2018/04/11 Python
canvas实现圆绘制的示例代码
2019/09/11 HTML / CSS
canvas实现二维码和图片合成的示例代码
2018/08/01 HTML / CSS
荷兰电脑专场:Paradigit
2018/05/05 全球购物
医院护士的求职信范文
2013/12/26 职场文书
代理班主任的自我评价
2014/02/04 职场文书
运动员获奖感言
2014/08/15 职场文书
2014年预备党员学习新党章思想汇报
2014/09/15 职场文书
法定代表人证明书
2014/11/28 职场文书
教师个人师德总结
2015/02/06 职场文书
2016年公司中秋节致辞
2015/11/26 职场文书
python中requests库+xpath+lxml简单使用
2021/04/29 Python
只用50行Python代码爬取网络美女高清图片
2021/06/02 Python