django makemigration 在子应用程序上抛出错误
Posted
技术标签:
【中文标题】django makemigration 在子应用程序上抛出错误【英文标题】:django makemigration throw error on sub app 【发布时间】:2020-10-16 09:26:20 【问题描述】:我通过django-admin startapp testing
在我的应用程序“inventory_management”中创建了一个应用程序
项目目录如下所示,其中emporium_apparel是我的主项目,testing是我的子应用
当我运行python manage.py makemigrations
它给了
Traceback (most recent call last):
File "manage.py", line 21, in <module>
main()
File "manage.py", line 17, in main
execute_from_command_line(sys.argv)
File "C:\Users\mhashirhassan22\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\management\__init__.py", line 401, in execute_from_command_line
utility.execute()
File "C:\Users\mhashirhassan22\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\management\__init__.py", line 377, in execute
django.setup()
File "C:\Users\mhashirhassan22\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "C:\Users\mhashirhassan22\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\apps\registry.py", line 91, in populate
app_config = AppConfig.create(entry)
File "C:\Users\mhashirhassan22\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\apps\config.py", line 90, in create
module = import_module(entry)
File "C:\Users\mhashirhassan22\AppData\Local\Programs\Python\Python38-32\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 973, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'testing'
【问题讨论】:
【参考方案1】:您需要将您的“测试”应用上移一个级别,使其看起来像这样:
- EMPORIUM_APPAREL
-- emporium_apparel
-- inventory_management
-- testing
确保您使用以下命令创建新应用:
python manage.py startapp testing
【讨论】:
我不能在 Django 中制作子应用吗? 你不能走这么多层次 - 你有你的项目,而那个项目中有应用程序。 您可以根据需要降低任意级别。软件自动化项目可以包含一个名为 project_management 的应用程序,该应用程序还可以包含“子应用程序”,如 scrum 和看板。所以有时它会有所帮助。 @hynekcer 更准确地解释了 django 在这件事上的立场【参考方案2】:如果应用程序是嵌套的并且无法从 Python 路径导入,那么您必须在 INSTALLED_APPS
中写一个完整路径,例如inventory_management.testing
在你的情况下。应用程序的 name 将只是最后一部分,例如testing
。这用于默认表名称以及迁移中。它类似于 INSTALLED_APPS 中的“django.contrib.admin”,但应用的简称为“admin”。该名称在您的项目中必须是唯一的。
“测试”这个名字似乎很笼统,可能是个问题。如果您遇到与具有名为“testing”的应用程序的其他包的名称冲突,您可以通过使用apps module 的项目的高级配置以另一个名称修复它,而无需更改任何应用程序中的任何内容。
Django 比较通用,没有“子应用”的概念。任何应用程序都可以依赖另一个应用程序,无论它是否在其目录中。
【讨论】:
inventory_management.testing
现在工作得很好。我在这里问之前尝试过,但我不知道我可能错过了一些东西非常感谢......很好解释的答案(Y)以上是关于django makemigration 在子应用程序上抛出错误的主要内容,如果未能解决你的问题,请参考以下文章
我应该对我的所有应用程序运行 Django“makemigrations”吗?
Django 使用数组字段在 makemigrations 上引发应用程序未加载错误
Django:添加整数字段后在应用程序上运行 makemigrations 时出现“未知列”
Django makemigrations 未检测到项目/应用程序/myapp