2014-01-17 31 views
1

我有一个Django应用程序具有这种结构: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/

+0

您正在使用什么版本的Django的? –

+0

我使用Django 1.4.10 – linkyndy

+0

的[主办Django的单元测试]可能重复(http://stackoverflow.com/questions/5160688/organizing-django-unit-tests) – sleepycal

回答

1

我认为test_models.py实际上是创建所有模型。 Django就为模型的应用程序名称作为父文件夹,并嵌套它,你有可能会导致其卡住查找应用程序名称。我不完全理解这里的机制,但我曾经体验过。简单的解决办法是使用Meta option手动指定应用程序:

class MyModel(Model): 

    ... 

    class Meta: 
     app_label = 'app' 
+0

这是它!非常感谢您为此修复:) – linkyndy

-1

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

from .test_model import * 
+0

这是同样的结果,在'test_model定义的模型.py'没有加载,他们的表都没有。 – linkyndy

+0

然后,你可能忽略了动态创建模型,如[SO回答]中所述(http://stackoverflow.com/a/2672444/3107299) – arocks

+0

@ aquavitae的答案更清晰,更“Djangoish”。感谢您的帮助:) – linkyndy