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比较通用,没有“子应用”的概念。任何应用程序都可以依赖于另一个应用程序,无论它是否在其目录中。