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

Django模型访问属性时出现self未定义错误,求技术帮助

解决Django模型中self is not defined错误

错误原因

  • 你定义的create_from_document方法没有把实例/类参数作为第一个参数:Python里实例方法必须以self作为首个参数,类方法则用cls,否则无法访问类或实例的属性,这直接导致了self is not defined报错。
  • 从方法逻辑来看,你是想通过传入的document创建并返回Receipt实例,这时候还没有实例存在,所以这个方法应该定义为类方法,而不是实例方法。

修正后的代码

class Receipt(models.Model):
    receipt_id = models.AutoField(
        primary_key=True,
        db_comment=""
    )

    store_name = models.TextField(
        max_length=255,
        default="Unidentified",
        db_comment=""
    )

    total_amt = models.DecimalField(
        max_digits=6,
        decimal_places=2,
        default=0.00,
        db_comment=""
    )

    @classmethod
    def create_from_document(cls, document):
        if document is None:
            return False
        
        # 创建Receipt实例
        receipt = cls()
        receipt.store_name = document.store_name
        receipt.total_amt = document.total_amt
        
        receipt.save()
        return receipt

关键修正点

  • 添加@classmethod装饰器,把方法标记为类方法,用cls作为第一个参数指代当前类
  • 通过cls()创建Receipt的实例,替代原来错误的self操作(原写法中没有实例,自然找不到self)
  • 对创建好的实例赋值属性、保存后返回实例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:45:58