You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django模型重写save()方法提示缺少必填参数tran如何解决?

报错根因

  • 调用save方法的方式错误:Transactions.save(DATE,tran)是将实例方法作为类方法调用,你自定义的save第一个参数是self,必须接收Transactions实例对象,按你的写法,DATE被传给了self,tran被传给了D参数,导致tran形参没有传入值,直接触发参数缺失报错。
  • 自定义save方法存在隐性bug:tran是字典类型,你写的tran.SERVICE_CODE用了属性访问的写法,字典不支持该写法,后续会触发属性不存在报错;计算PERCENTAGE_TECH_DEC时用到的变量T未定义,运行也会报错。
  • 调用父类save传参错误:Django原生Model的save方法不接收D、tran两个自定义参数,你尝试的super(Transactions,self).save(D,tran)写法会触发参数不匹配报错。

修复方案

1. 修正视图层调用逻辑

不要直接调用类的save方法,先实例化Transactions对象再调用实例的save方法:

import datetime
def fetch():
    DATE = datetime.datetime.now()
    print(DATE)
    obj = wf()
    for tran in obj:
        print(tran)
        # 实例化模型对象
        transaction = Transactions()
        # 调用实例的save方法
        transaction.save(DATE, tran)
    return Transactions.objects.all()

2. 修正模型层save方法逻辑

修复字典取值错误、未定义变量问题,同时添加通用参数兼容Django原生save的能力:

def save(self, D, tran, *args, **kwargs):
    self.DATE = D
    # 字典改用中括号取值
    self.TYPE = tran['SERVICE_CODE']
    self.SUCCESS = tran['Success']
    self.TECHNICAL_DECLINES = tran['Technical_declines']
    self.BUSINESS_DECLINES = tran['Business_declines']
    self.TOTAL = self.SUCCESS + self.TECHNICAL_DECLINES + self.BUSINESS_DECLINES
    # 替换未定义的T为技术拒绝数,添加除零判断避免报错
    if self.TOTAL > 0:
        self.PERCENTAGE_TECH_DEC = (self.TECHNICAL_DECLINES / self.TOTAL) * 100
    else:
        self.PERCENTAGE_TECH_DEC = 0
    # 调用父类save时传入通用参数,兼容Django原生save的所有配置项
    super(Transactions, self).save(*args, **kwargs)

内容的提问来源于stack exchange,提问作者Shankz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 01:48:02