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

Django从SQLite迁移到Postgres出现AttributeError报错该如何解决

报错诱因
  1. 导出数据的命令存在两处拼写错误:--naturalprimary应为--natural-primary,排除项contentypes应为contenttypes,错误的参数导致导出的外键关联数据不符合预期,导入时外键指向的关联对象无法被正确识别,变为空值None。
  2. 导入fixture时触发了用户模型的post_save信号逻辑,此时如果关联的business_location_county或business_location_state字段为空,或关联的地区表数据还未完成导入,就会出现None调用name属性的报错。SQLite本身对空值约束的宽松度较高,本地开发时可能存在地区字段为空的用户数据也正常存储,未触发报错,迁移时才暴露问题。
修复方案
  • 第一步:修正dumpdata导出命令,补充无用表排除项,导出正确的fixture文件:
python manage.py dumpdata --natural-foreign --natural-primary -e contenttypes -e auth.Permission -e sessions --indent 2 > data1.json
  • 第二步:导入fixture前临时禁用用户模型的post_save信号,或分批次导入数据:优先导入地区类的基础表数据,再导入用户表数据,避免导入用户时关联的地区对象还不存在。
  • 第三步:给信号逻辑增加空值判断,从代码层面规避空值报错,修改后代码参考:
if created:
    # 先校验关联字段非空再执行后续逻辑
    if instance.business_location_county and instance.business_location_state:
        new_group, created = Group.objects.get_or_create(
            name=f"{instance.business_location_county.name} {instance.business_location_state.name}", 
            forum_id=instance.business_location_county.id
        )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:06:05