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

运行Django shp导入脚本时出现FieldDoesNotExist错误求助

解决Django LayerMapping导入Shapefile时的FieldDoesNotExist错误

这个错误的根源很明确:你的目标shapefile里存在一个名为False的字段,但你的No_Address模型并没有定义对应的字段,而且你在字段映射字典里也没处理这个字段。加上你开启了strict=True的严格模式,LayerMapping会强制校验shapefile的所有字段都能找到模型中的对应映射,所以就抛出了这个"找不到'False'字段"的错误。

另外还有个容易忽略的问题:你的模型里定义了geom这个空间字段,但映射字典里完全没提它,这样空间数据根本导不进数据库,得一起解决。

下面是具体的修复步骤:

1. 先搞清楚shapefile的字段详情

先用GDAL的ogrinfo命令查看shapefile的所有字段(包括空间字段),这能帮你确认False字段的存在,以及找到空间字段的实际名称(大部分shapefile里叫SHAPE,但也可能是其他名字):

ogrinfo -al building/WestDV_CA_BF_NoAddress_region.shp

2. 修正字段映射字典

根据上面查到的信息,更新你的no_address_mapping:

  • 如果你不需要导入那个False字段,就把它映射为None,告诉LayerMapping直接忽略它
  • 加上geom字段的映射,对应shapefile里的空间字段名

举个例子,如果空间字段是SHAPE,修改后的字典应该是这样:

no_address_mapping = {
    'id' : 'ID',
    'address' : 'Address',
    'city' : 'City',
    'zip' : 'ZIP',
    'state' : 'State',
    'primpgon' : 'PrimPgon',
    'numpgons' : 'NumPgons',
    'x' : 'X',
    'y' : 'Y',
    'censusbloc' : 'CensusBloc',
    'objectid' : 'ObjectID',
    'geom' : 'SHAPE',  # 替换成你实际查到的空间字段名
    'False' : None,    # 忽略shapefile中的这个多余字段
}

3. 可选:关闭严格模式(不推荐)

如果你不想逐个处理多余字段,也可以把lm.save()里的strict=True改成strict=False,这样LayerMapping会自动跳过所有没在映射字典里定义的字段。不过这种方式不够清晰,后续维护容易踩坑,还是建议优先用上面的显式忽略方法。

额外提醒

记得确认shapefile里的字段类型和你模型里的字段类型匹配:比如shapefile里的ID是字符串类型(对应模型的id CharField),PrimPgon是整数类型(对应模型的primpgon BigIntegerField),避免后续出现类型转换错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:51:33