浅谈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编写类UNIX系统的命令行工具的教程
Apr 15 Python
python关键字and和or用法实例
May 28 Python
python 删除指定时间间隔之前的文件实例
Apr 24 Python
numpy中的delete删除数组整行和整列的实例
May 09 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
May 21 Python
Python中循环后使用list.append()数据被覆盖问题的解决
Jul 01 Python
Python列表(list)所有元素的同一操作解析
Aug 01 Python
TensorFlow2.0矩阵与向量的加减乘实例
Feb 07 Python
python设置环境变量的作用整理
Feb 17 Python
python中plt.imshow与cv2.imshow显示颜色问题
Jul 16 Python
Python3爬虫mitmproxy的安装步骤
Jul 29 Python
如何在python中实现线性回归
Aug 10 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文件向另一个地址post数据,不用表单和隐藏的变量的
2007/03/06 PHP
分页详解 从此分页无忧(PHP+mysql)
2007/11/23 PHP
一个图片地址分解程序(用于PHP小偷程序)
2014/08/23 PHP
js特效,页面下雪的小例子
2013/06/17 Javascript
js获取光标位置和设置文本框光标位置示例代码
2014/01/09 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
javascript中递归函数用法注意点
2015/07/30 Javascript
JS实现屏蔽网页右键复制及ctrl+c复制的方法【2种方法】
2016/09/04 Javascript
Javascript从数组中随机取出不同元素的两种方法
2016/09/22 Javascript
常用JS图片滚动(无缝、平滑、上下左右滚动)代码大全(推荐)
2016/12/20 Javascript
package.json文件配置详解
2017/06/15 Javascript
图片加载完成再执行事件的实例
2017/11/16 Javascript
将jquery.qqFace.js表情转换成微信的字符码
2017/12/01 jQuery
vue项目优化之通过keep-alive数据缓存的方法
2017/12/11 Javascript
vue如何判断dom的class
2018/04/26 Javascript
通过vue-cli3构建一个SSR应用程序的方法
2018/09/13 Javascript
webpack4与babel配合使es6代码可运行于低版本浏览器的方法
2018/10/12 Javascript
基于openlayers实现角度测量功能
2020/09/28 Javascript
JS如何调用WebAssembly编译出来的.wasm文件
2020/11/05 Javascript
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
Python的Flask框架中实现分页功能的教程
2015/04/20 Python
Windows下安装python2和python3多版本教程
2017/03/30 Python
Python 获得13位unix时间戳的方法
2017/10/20 Python
对matplotlib改变colorbar位置和方向的方法详解
2018/12/13 Python
Python3爬虫中识别图形验证码的实例讲解
2020/07/30 Python
html5响应式开发自动计算fontSize的方法
2020/01/13 HTML / CSS
AmazeUI 模态窗口的实现代码
2020/08/18 HTML / CSS
CK美国官网:Calvin Klein
2016/08/26 全球购物
班风学风建设方案
2014/05/06 职场文书
职业规划实施方案
2014/06/10 职场文书
计算机应用专业自荐信
2014/07/05 职场文书
个人存款证明书
2014/10/18 职场文书
晚会开幕词
2015/01/28 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书
七年级话题作文之执着
2019/11/19 职场文书
MySQL root密码的重置方法
2021/04/21 MySQL