Python Django-如何测试跨越多个数据库的models.ManyToManyField?

Python Django-如何测试跨越多个数据库的models.ManyToManyField?,python,python-3.x,django,Python,Python 3.x,Django,现在我必须集成一组跨越多个数据库的应用程序。 一个数据库是'default',我可以自由地进行迁移,许多模型都被路由到它。 另一个是,例如,“另一个数据库”,只有作者模型被路由到该数据库,我无权更改 我在测试时遇到了一个问题,比如: #一个应用程序/tests.py ... 类AuthorTest(TestCase): 数据库='\uuuu所有\uuuuu' 多维数据库=真 @类方法 def设置测试数据(cls): super().setUpTestData() cls.post\u 1=pos

现在我必须集成一组跨越多个数据库的应用程序。 一个数据库是
'default'
,我可以自由地进行迁移,许多模型都被路由到它。 另一个是,例如,
“另一个数据库”
,只有
作者
模型被路由到该数据库,我无权更改

我在测试时遇到了一个问题,比如:

#一个应用程序/tests.py
...
类AuthorTest(TestCase):
数据库='\uuuu所有\uuuuu'
多维数据库=真
@类方法
def设置测试数据(cls):
super().setUpTestData()
cls.post\u 1=post(title=“post\u 1\u title”)
cls.post_1.save()
cls.author\u 1=作者(name=“author\u 1\u title”)
cls.author_1.save()
def测试\u可添加(自身):
self.assertEqual(self.post_1.authors.count(),0)
self.post_1.authors.add(self.author_1)
self.assertEqual(self.post_1.authors.count(),1)#这里,测试失败。
测试消息显示:

正在为别名“default”创建测试数据库。。。
正在为别名“另一个数据库”创建测试数据库。。。
系统检查未发现任何问题(0静音)。
铁
======================================================================
错误:测试无法添加(一个app.tests.AuthorTest)
----------------------------------------------------------------------
回溯(最近一次呼叫最后一次):
文件“/Users/hiroyuki/PycharmProjects/some_app/venv/lib/python3.6/site packages/django/test/testcases.py”,第274行,在调用中__
self.\u post\u teardown()
文件“/Users/hiroyuki/PycharmProjects/some_app/venv/lib/python3.6/site packages/django/test/testcases.py”,第1009行,在拆卸后
自紧装置拆卸()
文件“/Users/hiroyuki/PycharmProjects/some_-app/venv/lib/python3.6/site-packages/django/test/testcases.py”,第1177行,位于拆卸中
连接[db\u name]。检查\u约束()
文件“/Users/hiroyuki/PycharmProjects/some_app/venv/lib/python3.6/site packages/django/db/backends/sqlite3/base.py”,第331行,检查约束
错误的\u值、引用的\u表\u名称、引用的\u列\u名称
django.db.utils.IntegrityError:主键为“1”的表“one_app_post_authors”中的行具有无效外键:one_app_post_authors.author id包含的值“1”在另一个_app_author.id中没有对应的值。
======================================================================
失败:测试可以添加(一个app.tests.AuthorTest)
----------------------------------------------------------------------
回溯(最近一次呼叫最后一次):
文件“/Users/hiroyuki/PycharmProjects/some_app/one_app/tests.py”,test_can_add中第23行
self.assertEqual(self.post_1.authors.count(),1)
断言错误:0!=1.
----------------------------------------------------------------------
在0.007s内运行1次测试
失败(失败=1,错误=1)
正在销毁别名“default”的测试数据库。。。
正在销毁别名“另一个\u db”的测试数据库。。。
在哪里,

#一个应用程序/models.py
...
班级职务(models.Model):
title=models.CharField(最大长度=20,null=True,blank=True)
作者=模型。ManyToManyField(作者)
#另一个_app/models.py
...
类作者(models.Model):
name=models.CharField(最大长度=20,null=True,blank=True)
#一个应用程序/settings.py
...
数据库={
“默认值”:{
“引擎”:“django.db.backends.sqlite3”,
'NAME':os.path.join(BASE_DIR'db.sqlite3'),
},
“另一个”:{
“引擎”:“django.db.backends.sqlite3”,
“NAME”:os.path.join(BASE_DIR,'db.sqlite3'),#作为示例,将其设置为默认值。
}
}
数据库_路由器=['one_app.router.MyRouter',]
...
#一个应用程序/router.py
类别MyRouter:
def db_用于_读取(自身、型号、**提示):
如果model.\u meta.app\u label==“另一个应用程序”:
返回“另一个数据库”
其他:
返回“默认值”
def db_用于_写入(自身、型号、**提示):
如果model.\u meta.app\u label==“另一个应用程序”:
返回“另一个数据库”
其他:
返回“默认值”
def allow_关系(自身、obj1、obj2、**提示):
返回真值
def allow_migrate(self、db、app_标签、model=None、**提示):
返回真值
如果
作者
模型一起驻留在
默认数据库中
则测试通过。因此,问题应该来自跨数据库

当我在
manage.py shell
环境中尝试相同的操作时,它工作正常。 这使我们了解到这个问题与测试环境有某种关系

我知道Django基本上不支持跨多个数据库的关系,但是,我非常需要解决方案

环境:Django3.0,Python3.6