我有一个具有以下结构的 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:没有这样的表:app_model
)。
为什么会这样?我应该如何避免这种情况并仍然将 test_model.py
文件放在 tests/
中?
最佳答案
我假设 test_models.py
实际上是您创建所有模型的地方。 Django 查找模型应用程序名称作为父文件夹,并按照您的方式嵌套它可能会导致它在查找应用程序名称时卡住。我不完全了解这里的机制,但我以前经历过。简单的解决方案是使用 Meta
option 手动指定应用程序:
class MyModel(Model):
...
class Meta:
app_label = 'app'
关于python - Django 测试模型根据它们的位置加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21187315/