Django2 inspectdb生成错误路径JSONField的技术求助
解决Django inspectdb生成JSONField导入路径拼写错误的问题
嘿,我懂你的懊恼——特意升级到Django 2就是为了让inspectdb能识别PostgreSQL的JSON字段,结果自动生成的代码还搞出个拼写错误,确实挺糟心的。
问题出在哪?
inspectdb生成模型代码时,把正确的导入路径django.contrib.postgres.fields.JSONField错误拆成了django.contrib.postgre sql.fields.JSONField(注意postgre和sql中间多了个空格),而且这个错误出现在AsyncResults类相关的代码里,导致你没法正常导入JSONField。
快速修复方案
手动修正导入语句
打开生成的models.py文件,找到那行错误的导入,直接把空格删掉:# 错误写法(带空格) from django.contrib.postgre sql.fields import JSONField # 改成正确的导入 from django.contrib.postgres.fields import JSONField同步修正字段定义
再检查AsyncResults类里的JSON字段定义,如果是用完整路径写的,也要把空格去掉;如果已经用了导入的类名,这步可以跳过:class AsyncResults(models.Model): # 错误的字段定义 your_json_field = django.contrib.postgre sql.fields.JSONField() # 修正后(推荐用导入后的类名) your_json_field = JSONField()
避免后续再踩坑(可选)
如果你经常要通过inspectdb生成带JSON字段的模型,可以自定义inspectdb的行为来彻底解决这个问题:
- 找到Django源码里的
django/db/backends/postgresql/introspection.py文件 - 定位到生成JSONField导入路径的代码段,确保
postgres是连写的字符串,不会被错误拆分
改完之后,跑一下python manage.py check验证下有没有导入错误,再正常使用模型就没问题啦!
内容的提问来源于stack exchange,提问作者Erindy
相关产品推荐
相关产品推荐

