我正在按照this cookiecutter template的结构设置Django项目,但是我的应用程序中存在明确的相对导入问题。
我正在尝试使用from .model import ModelA
导入我的模型,但是我从Django中收到此错误:
RuntimeError:模型类core.models.ModelA没有声明显式的app_label,也不在INSTALLED_APPS中的应用程序中。
我的项目的结构如下:
my_project
- config
- __init__.py
- settings.py
- urls.py
- my_project
- __init__.py
- core # this is an app
- __init__.py
- models.py
# remaining app files
manage.py
我当然可以将我的应用放入INSTALLED_APPS:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'my_projects.core.apps.CoreConfig', # my app
]
然后将CoreConfig设置为:
class CoreConfig(AppConfig):
name = 'my_project.core'
使用显式相对导入时,感觉django没有加载AppConfig。
如果我将导入更改为绝对路径from my_project.core.models import ModelA
我想念什么?
编辑1:
也许值得一提的是,我已经在manage.py
中添加了几行(如cookiecutter模板一样),用于将my_project
目录添加到sys.path中。
from django.conf import settings
sys.path.append(os.path.join(settings.ROOT_DIR, 'my_project'))
答案 0 :(得分:0)
在config.urls
中附加网址时,应使用my_projects.core.urls
而不是core.urls
。例如:
urlpatterns = [
...
# Your stuff: custom urls includes go here
path("my_projects/", include("my_projects.core.urls", namespace="my_projects")),
] + static(
settings.MEDIA_URL, document_root=settings.MEDIA_ROOT
)