浅谈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数组的处理代码
Jan 04 Python
Python两个整数相除得到浮点数值的方法
Mar 18 Python
python函数中return后的语句一定不会执行吗?
Jul 06 Python
Django模板变量如何传递给外部js调用的方法小结
Jul 24 Python
Python实现文件内容批量追加的方法示例
Aug 29 Python
使用Python的package机制如何简化utils包设计详解
Dec 11 Python
Python使用smtp和pop简单收发邮件完整实例
Jan 09 Python
解决Python3 抓取微信账单信息问题
Jul 19 Python
python3读取csv文件任意行列代码实例
Jan 13 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
Jun 03 Python
Django修改app名称和数据表迁移方案实现
Sep 17 Python
python 代码运行时间获取方式详解
Sep 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
国产动画《伍六七》原声大碟大卖,啊哈娱乐引领音乐赋能IP的新尝试
2020/03/08 国漫
php中去除所有js,html,css代码
2010/10/12 PHP
解析PHP缓存函数的使用说明
2013/05/10 PHP
深入解析php之sphinx
2013/05/15 PHP
php中的抽象方法和抽象类
2017/02/14 PHP
jQuery学习之prop和attr的区别示例介绍
2013/11/15 Javascript
js阻止事件追加的具体实现
2014/10/15 Javascript
javascript中for/in循环及使用技巧
2015/09/01 Javascript
Javascript设计模式理论与编程实战之简单工厂模式
2015/11/03 Javascript
基于jquery实现全屏滚动效果
2015/11/26 Javascript
js滚动条平滑移动示例代码
2016/03/29 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
React Native之TextInput组件解析示例
2017/08/22 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
2017/09/13 Javascript
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
微信小程序人脸识别功能代码实例
2019/05/07 Javascript
js HTML DOM EventListener功能与用法实例分析
2020/04/27 Javascript
JavaScript中使用Spread运算符的八种方法总结
2020/06/18 Javascript
[02:07]2017国际邀请赛中国区预选赛直邀战队前瞻
2017/06/23 DOTA
Python的垃圾回收机制深入分析
2014/07/16 Python
Python中if __name__ == "__main__"详细解释
2014/10/21 Python
Python、Javascript中的闭包比较
2015/02/04 Python
python提取字典key列表的方法
2015/07/11 Python
Python二进制文件读取并转换为浮点数详解
2019/06/25 Python
python写程序统计词频的方法
2019/07/29 Python
keras中的History对象用法
2020/06/19 Python
大学生村官任职感言
2014/01/09 职场文书
银行办理业务介绍信
2014/01/18 职场文书
统计专业自荐书
2014/07/06 职场文书
语文课外活动总结
2014/08/27 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
公司辞职信模板
2015/05/13 职场文书
2015年卫生院健康教育工作总结
2015/07/24 职场文书
python3实现Dijkstra算法最短路径的实现
2021/05/12 Python
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL
python中使用redis用法详解
2022/12/24 Redis