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

部署在Heroku的Django项目admin后台除Group外其余模型均报500错误

Django Heroku部署后Admin后台仅Group模型正常、其余模型500错误排查方案

第一步:先拿到具体报错信息

所有500错误优先查日志定位根因,在本地终端执行Heroku命令获取实时日志:

heroku logs --tail

刷新报错的Admin页面后,日志里会输出完整的错误栈,直接定位到报错的代码行。

最常见的2种触发原因

原因1:模型__str__方法存在空关联调用

这是90%以上符合当前场景的问题:

  • Admin列表页默认会调用模型的__str__方法展示每条数据的名称,前端页面没有用到这个方法所以运行正常
  • 大概率Student/Teacher模型的__str__方法里引用了外键关联属性(比如self.group.name),当实例的外键字段为空时,就会抛出AttributeError导致500
  • Group模型的__str__没有依赖其他关联属性,所以访问正常

修复方案:给__str__方法加空值判断,示例:

def __str__(self):
    # 处理外键为空的情况
    return f"{self.name} - {self.group.name if self.group else '未分配组别'}"

原因2:Admin注册配置错误

检查students/admin.py和teachers/admin.py的注册代码:

  • 确认list_display、list_filter、search_fields等配置项里的字段都是模型真实存在的字段
  • 如果配置了关联字段展示,Django 3.2及以上版本支持直接写外键名__关联字段,低版本需要自定义Admin方法返回关联属性,不能直接写关联字段名,否则会触发字段不存在错误。

其他低概率原因排查

  • 确认部署时所有数据库迁移都已执行,执行命令:
    heroku run python manage.py migrate
    
    如果Student/Teacher模型新增了字段但没执行迁移,访问Admin查询时会触发字段不存在错误。
  • 可以直接在Heroku的Shell环境下测试模型查询是否正常:
    heroku run python manage.py shell
    
    进入Shell后执行from students.models import Student; print(Student.objects.all()),如果执行报错就可以直接定位模型层面的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:06:01