Djangoのdatabase routerでImproperlyConfigured "cannot import name connection"
Djangoのdatabase routerはread/writeするdbを指定できる機能
Multiple databases | Django documentation | Django
ドキュメントを参考にして書いていて、ある特定のモデルの場合は、特別なDBをみるみたいなことをやろうとしたら以下のエラーになった。
django.core.exceptions.ImproperlyConfigured: Error importing database router PollRouter: "cannot import name connection"
サンプルだとこんな感じで、これがエラーになる
from polls.models import Poll class PollRouter(object): def db_for_read(self, model, **hints): if model in [Poll]: return 'poll_db' return None def db_for_write(self, model, **hints): if model in [Poll]: return 'poll_db' return None
調べてみると、バグとして報告されていることがわかった
#20704 (DATABASE_ROUTERS : ImproperlyConfigured "cannot import name connection") – Django
1.6系では修正されているらしい
modelをimportしているのがよくないらしいので、例えばこんな感じにすれば回避できる。
class PollRouter(object): def db_for_read(self, model, **hints): if model.__name__ in ['Poll']: return "default" return None def db_for_write(self, model, **hints): if model.__name__ in ['Poll']: return "default" return None