【问题标题】:Django migrations in subfolders子文件夹中的 Django 迁移
【发布时间】:2016-09-18 09:18:38
【问题描述】:

我的项目结构如下:

bm_app_1
 | contents here
bm_app_2
 | contents here
bm_common
 | __init__.py
 | deletable
 |  | __init__.py
 |  | behaviors.py
 |  | models.py
 | timestampable
 |  | __init__.py
 |  | behaviors.py

应用程序bm_common 中的文件定义了我想要在迁移文件中的托管模型。但是,当我运行python managepy makemigrations 时,不考虑应用程序bm_common 的子文件夹中的文件。所有应用都在INSTALLED_APPS

PREREQ_APPS = [
    required apps here
]
PROJECT_APPS = [
    'bm_common',
    'bm_app_1',
    'bm_app_2'
]
INSTALLED_APPS = PREREQ_APPS + PROJECT_APPS

有没有办法改变makemigrations 的行为来查看子文件夹?如果不是,那么进行这种拆分的好建议是什么?我不想将所有行为都集中在一个 behaviors.py 中,因为它变得太大并且对我造成了循环引用。

【问题讨论】:

    标签: python django django-models django-migrations


    【解决方案1】:

    当应用注册表填充所有模型时,需要以某种方式导入模型,否则它们没有被注册并且 Django 不知道它们。最简单的解决方案是创建一个bm_common/models.py 文件并在其中导入所有模型:

    from .deletable.models import ModelA, ModelB
    from .timestampable.models import ModelC
    ...
    

    【讨论】:

    • 那行得通。它仍然感觉有点解决方法,因为我现在有一个带有“未使用导入”的文件。
    • 在这个项目结构中,如果没有任何进一步的设置,我仍然会收到表名错误。创建表时,Django 取名bm_common_deletedrecord,但使用表时,Django 取名deletable_deletedrecord。
    • ^ 通过在导入语句时提供完整路径来解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 2018-01-21
    相关资源
    最近更新 更多