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

Django后台添加Simple模型时报错:getattr(): attribute name must be string

解决办法

根据报错栈信息,问题出在模型的日期唯一性校验环节:getattr(self, unique_for)中的unique_for不是字符串类型,导致调用失败。Admin界面会触发完整的表单校验(包括validate_unique),而shell中直接save()默认不会自动执行完整校验,所以出现差异。

排查步骤:

  1. 检查模型字段配置
    仔细核对Simple模型的所有字段,确认是否有字段设置了unique_for_date/unique_for_month/unique_for_year参数,且参数值为字符串类型(对应日期字段的名称)。
    错误示例(会触发该报错):

    # 错误:将类而非字符串传给unique_for_date
    created_at = models.DateTimeField(unique_for_date=Inner)
    

    正确示例:

    # 正确:指定日期字段名称字符串
    created_at = models.DateTimeField()
    name = models.CharField(max_length=200, unique_for_date='created_at')
    
  2. 清理并重新生成迁移文件
    如果确认模型配置无误,但问题仍存在,可能是迁移文件残留了错误配置:

    • 删除migrations目录下除__init__.py外的所有文件
    • 运行命令重新生成迁移:
      py manage.py makemigrations
      py manage.py migrate
      
  3. 检查Admin配置(可选)
    若上述步骤无效,查看admin.py中SimpleAdmin的配置,确认是否自定义了表单或校验逻辑,导致触发异常的校验流程。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:30:26