Python 强制Django识别多个“;模型“;同一应用程序中的文件夹?

Python 强制Django识别多个“;模型“;同一应用程序中的文件夹?,python,django,Python,Django,我的Django项目安排得很奇怪: /project |----manage.py |----/project |----settings.py |----urls.py |----/main |----/users |----/models |----__init__.py |----model1.py

我的Django项目安排得很奇怪:

/project
    |----manage.py
    |----/project
        |----settings.py
        |----urls.py
    |----/main
        |----/users
            |----/models
                |----__init__.py
                |----model1.py
                |----model2.py
                |----model3.py
            |----/views
                |----__init__.py
                |----view1.py
                |----view2.py
            |----/forms
                |----__init__.py
                |----form1.py
                |---form2.py
            |----urls.py
        |----/activities
            |----/models
                |----__init__.py
                |----model1.py
                |----model3.py
            |----/views
                |----__init__.py
                |----view1.py
                |----view2.py
            |----/forms
                |----__init__.py
                |----form1.py
            |----urls.py
        |----/migrations
        |----urls.py
        |----admin.py
        |----apps.py
这几乎是一个正常的设置,除了
用户
活动
在技术上不是应用程序
main
是应用程序。我的目标是使所有迁移保持线性

当我运行
python manage.py
时,Django会在
main/users/models
中看到模型,但不会在
main/activities/models
中看到模型


在考虑迁移时,是否有办法强制Django同时查看这两个文件夹。我可以创建
models
文件夹w/
\uuuu init\uuuu.py
,导入
main
中的所有内容,但是,如果可能的话,我希望保留当前设置并只更改Django的外观

在这种情况下,您需要克服两个问题

  • 没有设置让Django在除
    模型之外的模块中查找模块。实际上,它是一个硬编码的模块名

  • 即使您可以覆盖Django它要查找的模块,它仍然只在单个模块中查找,您有两个模块

  • 您有几个选项来实现这一点。首先,我强烈认为把这一个应用程序分成两个。你说
    用户
    活动
    不是应用程序,但它们的结构却在尖叫:它们不仅各自有自己的
    模型
    ,还有自己的
    视图
    表单
    URL
    。如果你让它们成为自己的、成熟的应用程序,你最终会得到一个更好的结构

    如果你真的想保留现有的结构,那么你有两个选择。最简单的方法是简单地创建一个
    main/models.py
    ,然后从那里导入各自的模型

    main/models.py

    from .users.models import *
    from .activities.models import *
    

    就这么简单。更复杂的选项是覆盖
    main/apps.py
    AppConfig
    类中的
    .get\u models()
    方法。如果你想走这条路,我可以提出一个例子。

    在这种情况下,你需要克服两个问题

  • 没有设置让Django在除
    模型之外的模块中查找模块。实际上,它是一个硬编码的模块名

  • 即使您可以覆盖Django它要查找的模块,它仍然只在单个模块中查找,您有两个模块

  • 您有几个选项来实现这一点。首先,我强烈认为把这一个应用程序分成两个。你说
    用户
    活动
    不是应用程序,但它们的结构却在尖叫:它们不仅各自有自己的
    模型
    ,还有自己的
    视图
    表单
    URL
    。如果你让它们成为自己的、成熟的应用程序,你最终会得到一个更好的结构

    如果你真的想保留现有的结构,那么你有两个选择。最简单的方法是简单地创建一个
    main/models.py
    ,然后从那里导入各自的模型

    main/models.py

    from .users.models import *
    from .activities.models import *
    

    就这么简单。更复杂的选项是覆盖
    main/apps.py
    AppConfig
    类中的
    .get\u models()
    方法。如果你想走这条路,我可以想出一个例子。

    确保子模块在
    \uuuu init\uuuuuuuuuuuuuy.py
    中导入。确保子模块在
    \uuuu init\uuuuuuuuuuuuy.py
    中导入。从
    \uuu init\uuuuuuuuuuuuuuuuuuuuuuuuuy.py>导入实际上不起作用(我收到了一个
    django.core.exceptions.AppRegistryNotReady:应用程序还没有加载。
    错误)。我更愿意这样做,但添加
    models.py
    并不是什么大问题。我想,现在,我会保留这个结构,如果需要,将
    用户
    活动
    发送到他们自己的应用程序将非常容易(我正在明确命名他们的数据表,所以这不应该是一个问题)感谢更新。我将删除该建议。从
    \uuu init\uuuuuuuuuupy
    导入实际上不起作用(我收到一个
    django.core.exceptions.AppRegistryNotReady:应用程序尚未加载。
    错误)。我更愿意这样做,但添加
    models.py
    并不是什么大问题。我想,现在,我会保持这种结构,如果需要的话,将
    用户
    活动
    发送到他们自己的应用程序会非常容易(我会显式地命名他们的数据表,所以这应该不会是个问题)谢谢更新。我将删除该建议。