我的 Django 项目有多个应用程序,除了名为 platform
的应用程序之外,所有应用程序都没有问题。要从此应用程序导入,我需要使用完整路径,而不是直接导入它,例如:
from app.models import MyModel # Doesn't work for platform app, but it does for others
对比
from project_root.app.models import Mymodel # Have to do this only for platform app
我将名称从 platform
更改为 theplatform
并且它起作用了。导入工作没有完整路径,makemigrations 开始查找模型。唯一改变的是应用程序的名称。
我的每个应用程序都有一个 apps.py
,其中有一个类继承自 AppConfig
并带有应用程序的名称,并且所有这些应用程序都位于已安装的应用程序中。我还确保添加/删除 init.py 不会造成任何困惑。我非常确定这里唯一的变量是应用程序的名称。
Django 中是否存在保留或非法的应用程序名称?如果有的话有什么地方我可以读一下吗?我知道的唯一限制是名称中不能包含破折号。
最佳答案
platform
[1] 是 python 中的内置模块,并且可能在导入路径上显示在本地 platform
模块之前。
您需要通过查看sys.path
(import sys
)来检查您的导入路径以确定是否正确。通常 ''
首先出现,并且是您当前的工作目录,因此所有本地模块都会覆盖/隐藏系统模块。
您可以使用环境变量 PYTHONPATH
或更改 sys.path
来修改导入路径,以使您的本地平台
成为找到的第一个,但我建议不要使用该名称。您将来使用的某些软件包可能希望在导入平台
时获取系统模块,但无法工作。
关于python - Django 应用程序是否有保留/非法名称?导入/makemigrations 无法根据应用程序名称进行工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66448607/