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

Django编写信号触发TypeError: 意外关键字参数'model_name'如何解决

报错原因
  • 核心参数匹配错误:你在create_payment_record信号函数中调用Payment_record.objects.create()时,传入的关键字参数是Payment=instance,但Payment_record模型中关联Payment的外键字段命名为student_name,字段名不匹配导致参数无法被识别。
  • 冗余信号逻辑错误:你写的第二个save_payment_record信号完全多余且存在多处错误:
    • Payment实例反向关联Payment_record的属性名是你在外键中定义的related_name="pay_date_record",不存在instance.Payment_record这个属性
    • 即使属性正确,你写的save没有加括号,并不会实际执行保存方法
    • 创建Payment_record实例时调用create()方法已经自动完成保存,不需要额外触发保存逻辑
  • 额外的model_name报错通常是因为信号注册逻辑异常,大概率是你INSTALLED_APPS中没有正确配置带全路径的FinancesConfig,导致ready方法没有按预期执行。
修复方案

1. 修正signals.py代码

直接删除多余的保存信号,仅保留创建逻辑,修改参数字段名即可:

from .models import Payment_record, Payment
from django.db.models.signals import post_save
from django.dispatch import receiver

@receiver(post_save, sender=Payment)
def create_payment_record(sender, instance, created, **kwargs):
    if created:
        # 外键字段名是student_name,对应传入Payment实例
        Payment_record.objects.create(student_name=instance)

2. 检查settings.py配置

确保INSTALLED_APPS中配置的是全路径的AppConfig,否则信号不会生效:

INSTALLED_APPS = [
    # 其他应用配置
    'finances.apps.FinancesConfig',
]

3. 可选优化

你当前的Payment_record模型中外键字段命名为student_name但实际关联的是Payment实例,命名容易产生歧义,建议修改为更贴合语义的名称比如payment,同步修改信号中的参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:54:01