我有一個將模型分割成不同文件的應用程序。在「models.py」以外聲明模型並動態地
其實該文件夾的樣子:
>myapp
__init__.py
models.py
>hooks
...
...
myapp
不關心什麼是在hooks
,文件夾,除了有模型,他們必須以某種方式進口,並通過執行syncdb安裝。所以,我把這個myapp.__init__.py
:
from django.conf import settings
for hook in settings.HOOKS :
try :
__import__(hook)
except ImportError as e :
print "Got import err !", e
#where settings.HOOKS = ("myapp.hooks.a_super_hook1", ...)
爲了使此代碼工作,在hooks
的車型有
class Meta:
app_label="my_app"
的問題是,當我運行syncdb
它不工作。
所以,我想依次爲:
1)
for hook in settings.HOOKS :
try :
exec ("from %s import *" % hook)
- >不工作之一:執行syncdb不hooks
2)
安裝模式from myapp.hooks.a_super_hook1 import *
- >這工作
3)
exec("from myapp.hooks.a_super_hook1 import *")
- >本工程以
所以我檢查,在測試1),執行的語句是與測試相同2)和3),它是完全一樣...
任何想法???
編輯: 這個問題可以被歸結爲:
我宣佈「models.py」,其中把我進口碼外模式,讓syncdb
找到的模式?
不知道爲什麼這被低估。你能提供一個理由嗎? – 2010-04-29 14:54:58
是的!這絕對是由syncdb選擇的(請參見示例2和3)......但這意味着我必須對要導入的模塊進行硬編碼!而我不想。 但無論如何......爲什麼地獄的第一塊代碼不起作用?這實際上是我的問題! PS:我不知道你爲什麼被低票,因爲你是最能理解我的問題的人。 – sebpiq 2010-04-30 06:46:00
可能是導入(第一種情況)會起作用,但是這不會使syncdb安裝所需的模型,因爲它(syncdb)將始終取決於'installed_apps'設置,並且將僅根據。這就是爲什麼這些模型以'間接的方式''apped'到app/models.py(syncdb始終感興趣) – 2010-04-30 07:45:52