浅谈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实现简单的TCP代理服务器
Oct 08 Python
使用Python脚本来获取Cisco设备信息的示例
May 04 Python
Python随机读取文件实现实例
May 25 Python
对python中return和print的一些理解
Aug 18 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
Aug 31 Python
用TensorFlow实现多类支持向量机的示例代码
Apr 28 Python
对Python 语音识别框架详解
Dec 24 Python
python写入文件自动换行问题的方法
Jul 05 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
Jan 22 Python
python 错误处理 assert详解
Apr 20 Python
python的Jenkins接口调用方式
May 12 Python
python中的被动信息搜集
Apr 29 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中的日期处理方法集锦
2007/01/02 PHP
MySql中正则表达式的使用方法描述
2008/07/30 PHP
php与php MySQL 之间的关系
2009/07/17 PHP
浅析php插件 HTMLPurifier HTML解析器
2013/07/01 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
php之curl实现http与https请求的方法
2014/10/21 PHP
24条货真价实的PHP代码优化技巧
2016/07/28 PHP
phpstudy默认不支持64位php的解决方法
2017/02/20 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
php双层循环(九九乘法表)
2017/10/23 PHP
innerText和textContent对比及使用介绍
2013/02/27 Javascript
根据经纬度计算地球上两点之间的距离js实现代码
2013/03/05 Javascript
js左侧三级菜单导航实例代码
2013/09/13 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
2013/10/11 Javascript
append和appendTo的区别以及appendChild用法
2013/12/24 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
原生js实现吸顶效果
2017/03/13 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
jquery应用实例分享_实现手风琴特效
2018/02/01 jQuery
JavaScript中为事件指定处理程序的五种方式分析
2018/07/27 Javascript
微信小程序国际化探索实现(附源码地址)
2020/05/20 Javascript
[46:48]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第三局
2016/02/25 DOTA
在IIS服务器上以CGI方式运行Python脚本的教程
2015/04/25 Python
python对离散变量的one-hot编码方法
2018/07/11 Python
在Pycharm中项目解释器与环境变量的设置方法
2018/10/29 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
2020/02/17 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的示例代码
2021/02/24 HTML / CSS
让ie浏览器成为支持html5的浏览器的解决方法(使用html5shiv)
2014/04/08 HTML / CSS
荷兰网上鞋店:Ziengs.nl
2017/01/02 全球购物
美丽的现代设计家具:2Modern
2018/07/26 全球购物
2014年六一儿童节演讲稿
2014/05/23 职场文书
推广普通话共筑中国梦演讲稿
2014/09/21 职场文书
2014年卫生保健工作总结
2014/12/08 职场文书
2015年国庆节标语大全
2015/07/30 职场文书
深度好文:50条没人告诉你的人生经验,句句精辟
2019/08/22 职场文书
解决spring.thymeleaf.cache=false不起作用的问题
2022/06/10 Java/Android