【问题标题】:Django test models get loaded depending on their location?Django 测试模型的加载取决于它们的位置?
【发布时间】:2014-02-06 20:48:34
【问题描述】:

我有一个具有这种结构的 Django 应用程序:

app/
    tests/
        __init__.py
        tests.py
    __init__.py
    test_model.py

tests.py 中,我导入测试模型,例如:from app.test_model import *。这按预期工作:在测试期间,模型被加载,相应的数据库表被创建等等。

但是,如果我将test_model.py 文件移动到tests/ 目录中:

app/
    tests/
        __init__.py
        test_model.py
        tests.py
    __init__.py

并相应地进行导入:from app.tests.test_model import *,它突然失败了。未检测到模型,因此未创建其数据库表并且测试开始失败 (DatabaseError: no such table: app_model)。

为什么会这样?我应该如何避免这种情况并仍然将test_model.py 文件放在tests/ 中?

【问题讨论】:

标签: python django testing python-import


【解决方案1】:

您应该在包中使用本地导入:

from .test_model import *

【讨论】:

【解决方案2】:

我假设test_models.py 实际上是您创建所有模型的地方。 Django 查找模型应用程序名称作为父文件夹,并且按照您的方式嵌套它可能会导致它在查找应用程序名称时遇到困难。我不完全了解这里的机制,但我以前经历过。简单的解决方案是使用Meta option 手动指定应用程序:

class MyModel(Model):

    ...

    class Meta:
        app_label = 'app'

【讨论】:

  • 就是这样!非常感谢您的修复:)
【解决方案3】:
from test_model import *

试试这个,可能会有帮助

【讨论】:

    猜你喜欢
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    相关资源
    最近更新 更多