前提:使用Django框架开发,一开始使用Django3.2
报错一:在使用jsonfield中的JSONField时报错
File "/data/app/hn_data_collect/hn_data_collect/proxy/models.py", line 6, in <module>
from .custom_fields import JSONField
File "/data/app/hn_data_collect/hn_data_collect/proxy/custom_fields.py", line 2, in <module>
from jsonfield import JSONField as upstream_JSONField
File "/data/Envs/hn_data_collect/lib/python3.6/site-packages/jsonfield/__init__.py", line 3, in <module>
from .fields import JSONField
File "/data/Envs/hn_data_collect/lib/python3.6/site-packages/jsonfield/fields.py", line 11, in <module>
from django.utils import six
ImportError: cannot import name 'six'
进过排查发现:Django3无法导入six
解决方法:
from django.utils import six
改为
import six
因为我的项目的特殊性,我将Django3.2改为Django2.2, 问题也能解决。
报错二:使用外键时报错
project = models.ForeignKey(Project)
错误信息如下:
TypeError: __init__() missing 1 required positional argument: 'on_delete'
经过排查:django 升级到2.0之后,表与表之间关联的时候,必须要写on_delete参数,否则会报异常。
解决方法如下:
project = models.ForeignKey(Project, on_delete=models.CASCADE)
同样因为项目的特殊性,我将Django2.2改为Django1.11, 问题也能解决。
报错三:改为Django1.11时,path引入报错
from django.urls import path, include
改为
from django.conf.urls import url, include
原因:django1.11版本时,配置路由一直都是再用url方法,只要升到Django2才能使用path。