浅谈django 模型类使用save()方法的好处与注意事项

作者:Yambo1992 时间:2021-05-17 10:43:59 

如下所示:


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()

通过这样的方法,我们就可以保存到数据库了。

来源:https://blog.csdn.net/Yambo1992/article/details/81020218

标签:django,模型类,save
0
投稿

猜你喜欢

  • 如何在Django中设置定时任务的方法示例

    2023-03-21 06:19:07
  • 用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法

    2024-04-19 09:45:30
  • python中退出多层循环的方法

    2021-09-09 11:09:46
  • Go语言程序开发gRPC服务

    2024-04-23 09:38:02
  • 打造通用ASP.NET数据分页控件

    2007-08-18 13:27:00
  • 解决Python图形界面中设置尺寸的问题

    2022-11-12 12:05:02
  • 在ASP中使用类,实现模块化

    2008-10-15 14:57:00
  • 利用标准库fractions模块让Python支持分数类型的方法详解

    2023-06-06 05:23:47
  • Python 解析库json及jsonpath pickle的实现

    2021-09-10 00:27:14
  • 文字超长自动省略,以...代替,CSS实现

    2009-07-16 10:15:00
  • 对python读取zip压缩文件里面的csv数据实例详解

    2022-04-14 10:48:57
  • 超详细注释之OpenCV操作图像平移转换

    2022-08-14 19:29:38
  • Python操作SQLite数据库过程解析

    2024-01-26 08:16:38
  • python3.6使用urllib完成下载的实例

    2023-08-03 21:21:13
  • 视觉设计常见误解

    2008-11-13 13:09:00
  • Flyway的简单介绍及使用详解

    2022-05-05 07:35:34
  • pandas to_excel 添加颜色操作

    2021-07-19 19:49:57
  • Python中利用sqrt()方法进行平方根计算的教程

    2022-09-17 13:11:25
  • 使用Python生成XML的方法实例

    2022-10-01 19:20:15
  • Mysql IO 内存方面的优化

    2024-01-15 11:55:18
  • asp之家 网络编程 m.aspxhome.com