小插话1:django+xadmin关于model的save_models(增改数据)浅谈

介绍

目前python软件开发中django较为常用,而django和xadmin的结合大大节省了开发时间,加快开发效率。虽然如此,model操作仍然需要人为添加逻辑或者修改逻辑。万幸django提供了这个机制,方法是def save_models(self)该方法是用于django的model保存或者修改时带入个人逻辑而可以重载的方法。

示例如下:

需求

Dayneed表在新增时需要向Account表添加数据,在修改时向Account表修改数据。假设添加数据为dayneedextend值全加到Accountextend值里,假设修改数据为将dayneed的旧extend值从Accountextend值里减去,并将dayneed的新extend值添加到Accountextend值中。

逻辑

    def save_models(self):
        path = self.request.path
        if path.split('/')[-2] == 'update':
            obj = self.new_obj
            oldextend = Dayneed.objects.filter(id=obj.id)[0].extend
       
            curtime = obj.time
            money = obj.extend
           
            acs = Account.objects.filter(time=curtime)
            if acs:
                acc = acs[0]
                acc.extend -= oldextend
                acc.extend += money
                acc.save()
            else:
                acc = Account()
                acc.extend = money
                acc.save()
           
            obj.save()
        else:
           
            obj = self.new_obj
            curtime = obj.time
            money = obj.extend
            obj.save()
            acs = Account.objects.filter(time=curtime)
           
            for acc in acs:
                if acc is None:
                    acc.extend = money
                    acc.save()
                else:
                    acc.extend += money
                    acc.save()

         
            if not acs:
                acc = Account()
                acc.time = curtime
                acc.extend = money
                acc.save()

描述

self.new_obj是已经实例化的带有新增或者修改数据的Dayneed对象。
Dayneed.objects.filter(id=obj.id)是查找数据库中与目前修改后但是并未保存到数据库中的Dayneed表是同一数据的旧Dayneed表。
obj.save()是保存当前修改或者新增的Dayneed表。

结论

经过以上叙述,说明save_models的逻辑可以操作。在使用任何源码时应有无所畏惧的心理和敢于实践的能力。

下文链接:小插话2:django+xadmin(pycharm)上线级项目之404、500配置详说(详细教程)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河南-殷志强

希望我的文章能帮助到你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值