我有一个使用两个数据库的网站。我按照 django 文档中的说明设置了路由器。当我使用 runserver 时,路由工作正常。但是我无法使用 LiveServerTestCase 对其进行测试。查询集为空。我假设固定装置没有正确加载到第二个数据库中。如果我删除数据库路由器(因此只使用一个 db),测试就可以工作。
这是我的路由器配置:
class ScreenerRouter(object):
def db_for_read(self, model, **hints):
if model._meta.app_label == 'screener':
return 'filemaker'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label == 'screener':
return 'filemaker'
return None
def allow_relation(self, obj1, obj2, **hints):
if obj1._meta.app_label == 'screener' or obj2._meta.app_label == 'screener':
return True
return None
def allow_syncdb(self, db, model):
if db == 'filemaker':
return model._meta.app_label == 'screener'
elif model._meta.app_label == 'screener':
return False
return None
我在 TestCase 中设置了 multi_db = True 。
另一个问题是 dumpdata --database=filemaker screener.ScreenerRouter 返回一个空数组,即使数据库中有条目。我什至可以在 DjangoAdmin 中编辑它们。我不得不将数据复制到默认数据库并从那里转储。