浅谈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的ORM框架SQLObject入门实例
Apr 28 Python
在服务器端实现无间断部署Python应用的教程
Apr 16 Python
Python实现的FTP通信客户端与服务器端功能示例
Mar 28 Python
Python操作MySQL数据库的方法
Jun 20 Python
python实现二维插值的三维显示
Dec 17 Python
python 使用装饰器并记录log的示例代码
Jul 12 Python
django-filter和普通查询的例子
Aug 12 Python
pytorch 可视化feature map的示例代码
Aug 20 Python
python 矢量数据转栅格数据代码实例
Sep 30 Python
Django中提示消息messages的设置方式
Nov 15 Python
python中使用np.delete()的实例方法
Feb 01 Python
python 判断文件或文件夹是否存在
Mar 18 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
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
2014/07/02 PHP
php目录遍历函数opendir用法实例
2014/11/20 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
windows环境下使用Composer安装ThinkPHP5
2018/05/18 PHP
window.open以post方式将内容提交到新窗口
2012/12/26 Javascript
node.js中的path.isAbsolute方法使用说明
2014/12/08 Javascript
javascript实现按回车键切换焦点
2015/02/09 Javascript
jquery实现的缩略图预览滑块实例
2015/06/25 Javascript
JS实现鼠标框选效果完整实例
2016/06/20 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
Vue.js实现的购物车功能详解
2019/01/27 Javascript
小程序两种滚动公告栏的实现方法
2019/09/17 Javascript
Layer组件多个iframe弹出层打开与关闭及参数传递的方法
2019/09/25 Javascript
微信小程序scroll-view的滚动条设置实现
2020/03/02 Javascript
[04:40]2016个国际邀请赛中国区预选赛场地——华西村观战指南
2016/06/25 DOTA
深入源码解析Python中的对象与类型
2015/12/11 Python
python实现机械分词之逆向最大匹配算法代码示例
2017/12/13 Python
使用python实现knn算法
2017/12/20 Python
python使用RNN实现文本分类
2018/05/24 Python
python 提取tuple类型值中json格式的key值方法
2018/12/31 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
2019/06/13 Python
python数据预处理 :数据共线性处理详解
2020/02/24 Python
Python提取视频中图片的示例(按帧、按秒)
2020/10/22 Python
为世界各地的女性设计和生产时尚服装:ROMWE
2016/09/17 全球购物
物流专业大学应届生求职信
2013/11/03 职场文书
党员年终民主评议的自我评价
2013/11/05 职场文书
行政前台岗位职责
2013/12/04 职场文书
幼儿教育感言
2014/02/05 职场文书
事务机电主管工作职责
2014/02/25 职场文书
竞选班长自荐书范文
2014/03/09 职场文书
施工协议书范本
2014/04/22 职场文书
2015年财务工作总结范文
2015/03/31 职场文书
2016年国培心得体会及反思
2016/01/13 职场文书
退休劳动合同怎么写?
2019/10/25 职场文书
python实现局部图像放大
2021/11/17 Python
彻底弄懂Python中的回调函数(callback)
2022/06/25 Python