django makemigration 在子应用程序上抛出错误
django makemigration throw error on sub app
我在 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'
您需要将您的“测试”应用提升一个级别,因此它应该如下所示:
- EMPORIUM_APPAREL
-- emporium_apparel
-- inventory_management
-- testing
确保使用以下命令创建新应用:
python manage.py startapp testing
如果应用程序是嵌套的并且无法从 Python 路径导入,那么您必须在 INSTALLED_APPS
中写入 完整路径 ,例如inventory_management.testing
你的情况。应用程序的名称只是最后一部分,例如testing
。这用于默认表名和迁移中。它类似于INSTALLED_APPS中的“django.contrib.admin”,但简称为“admin”。该名称在您的项目中必须是唯一的。
“testing”这个名字看起来很笼统,可能是个问题。如果您遇到与另一个具有名为“testing”的应用程序的包的名称冲突,您可以通过使用 apps module 对项目进行高级配置来用另一个名称修复它,而无需在任何应用程序中进行任何更改。
Django比较通用,没有“子应用”的概念。任何应用程序都可以依赖于另一个应用程序,无论它是否在其目录中。
我在 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'
您需要将您的“测试”应用提升一个级别,因此它应该如下所示:
- EMPORIUM_APPAREL
-- emporium_apparel
-- inventory_management
-- testing
确保使用以下命令创建新应用:
python manage.py startapp testing
如果应用程序是嵌套的并且无法从 Python 路径导入,那么您必须在 INSTALLED_APPS
中写入 完整路径 ,例如inventory_management.testing
你的情况。应用程序的名称只是最后一部分,例如testing
。这用于默认表名和迁移中。它类似于INSTALLED_APPS中的“django.contrib.admin”,但简称为“admin”。该名称在您的项目中必须是唯一的。
“testing”这个名字看起来很笼统,可能是个问题。如果您遇到与另一个具有名为“testing”的应用程序的包的名称冲突,您可以通过使用 apps module 对项目进行高级配置来用另一个名称修复它,而无需在任何应用程序中进行任何更改。
Django比较通用,没有“子应用”的概念。任何应用程序都可以依赖于另一个应用程序,无论它是否在其目录中。