浅谈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切片用法实例教程
Sep 08 Python
python的Template使用指南
Sep 11 Python
Python中非常实用的一些功能和函数分享
Feb 14 Python
Python二分法搜索算法实例分析
May 11 Python
Python中字符串的格式化方法小结
May 03 Python
Python金融数据可视化汇总
Nov 17 Python
python之matplotlib学习绘制动态更新图实例代码
Jan 23 Python
Python模拟随机游走图形效果示例
Feb 06 Python
python3的pip路径在哪
Jun 23 Python
Python自动化xpath实现自动抢票抢货
Sep 19 Python
python实现双人五子棋(终端版)
Dec 30 Python
python全面解析接口返回数据
Feb 12 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
用户的详细注册和判断
2006/10/09 PHP
thinkPHP自动验证、自动添加及表单错误问题分析
2016/10/17 PHP
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
jQuery之end()和pushStack()使用介绍
2012/02/07 Javascript
jquery 鼠标滑动显示详情应用示例
2014/01/24 Javascript
JS控制一个DIV层在指定时间内消失的方法
2014/02/17 Javascript
把jQuery的类、插件封装成seajs的模块的方法
2014/03/12 Javascript
浅析BootStrap中Modal(模态框)使用心得
2016/12/24 Javascript
node.js 抓取代理ip实例代码
2017/04/30 Javascript
jQuery制作全屏宽度固定高度轮播图(实例讲解)
2017/07/08 jQuery
详解layui中的树形关于取值传值问题
2018/01/16 Javascript
JS实现将链接生成二维码并转为图片的方法
2018/03/17 Javascript
基于Angularjs-router动态改变Title值的问题
2018/08/30 Javascript
你准备好迎接vue3.0了吗
2020/04/28 Javascript
何时/使用 Vue3 render 函数的教程详解
2020/07/25 Javascript
JS可断点续传文件上传实现代码解析
2020/07/30 Javascript
python3实现多线程聊天室
2018/12/12 Python
Python+selenium点击网页上指定坐标的实例
2019/07/05 Python
python内存管理机制原理详解
2019/08/12 Python
mac在matplotlib中显示中文的操作方法
2020/03/06 Python
在python里创建一个任务(Task)实例
2020/04/25 Python
python 监控服务器是否有人远程登录(详细思路+代码)
2020/12/18 Python
美国宠物护理专家:Revival Animal Health
2020/01/05 全球购物
机械制造专业毕业生求职信
2014/03/02 职场文书
食品销售计划书
2014/04/26 职场文书
家长学校工作方案
2014/05/07 职场文书
信用社主任竞聘演讲稿
2014/05/23 职场文书
创先争优公开承诺书
2014/08/30 职场文书
考试作弊检讨书
2014/10/21 职场文书
先进班组事迹材料
2014/12/25 职场文书
大学教师个人总结
2015/02/10 职场文书
2016学雷锋优秀志愿者事迹材料
2016/02/25 职场文书
SpringBoot 集成Redis 过程
2021/06/02 Redis
Python并发编程实例教程之线程的玩法
2021/06/20 Python
JavaScript函数柯里化
2021/11/07 Javascript
【海涛解说】暗牧也疯狂,牛蛙成配角
2022/04/01 DOTA