小插话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配置详说(详细教程)

你可能感兴趣的:(笔记,django,python)