Django将模型移至公共文件后LookupError报错的解决方法
解决Django模型重构后Redis存储对象引发的LookupError问题
重构Django项目时,为解决多应用间模型字段重复、定义不一致的问题,我将各应用的模型统一整合到一个公共models.py文件中,并注释掉了stat_table应用内已完成迁移的SolarStationAddInfo模型。但启动项目时触发了如下报错:
LookupError: App 'stat_table' doesn't have a 'SolarStationAddInfo' model
问题根因
经排查,stat_table服务启动时会读取Redis中stations键存储的SolarStationAddInfo实例对象,而这些对象是重构前基于旧stat_table应用的models.py导入创建并序列化存储的。现在模型类的路径已变更,反序列化时无法找到对应类,因此抛出查找错误。
解决步骤
- 修改项目中所有引用
SolarStationAddInfo的代码,将导入路径更新为新的公共models.py路径 - 执行自定义的Redis对象重建函数,重新生成
SolarStationAddInfo实例并覆盖Redis中stations键对应的存储内容,确保反序列化后的对象关联到新的模型类
关键提醒
注意:若项目使用Redis等缓存/存储服务保存Django模型对象,在重构模型类(包括移动类文件、变更类的归属应用/模块)后,必须重新生成并存储相关对象,否则会因类路径不匹配引发类似的查找错误。
内容的提问来源于stack exchange,提问作者Віктор Ніжурін
相关产品推荐
相关产品推荐

