小插话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的逻辑可以操作。在使用任何源码时应有无所畏惧的心理和敢于实践的能力。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容