我目前正在为我们的 django 应用程序编写测试。可悲的是,我们不得不使用多数据库布局并且无法更改这一点。(跨多个数据中心的不同服务器上具有多个后端的分布式数据库)
我们有两个数据库:
- 带有 django 默认表的默认数据库
- 具有某些模型的应用程序数据库
对于这些模型,我们编写了不同的路由器,如 django 网站上记录的那样。现在的问题是,如果我运行 python manage.py test customerreceipts 测试框架会在几秒钟后死亡,并出现以下错误:
django.db.utils.ProgrammingError: relation "auth_user" does not exist
我检查了创建的数据库,没有表。因此,来自模型的查询会引发错误。
问题模型是(在数据库 2 中):
class CustomerReceipts(models.Model):
def _choices_user():
users = User.objects.all()
users = users.order_by('id')
return [(e.id, e.username) for e in users]
# General
receipt_name = models.CharField(max_length=20, verbose_name="Receipt name") #: Receipt name
....
# Auditing
owner = models.IntegerField(verbose_name="Owner", choices=[('', '')] + _choices_user())
因为多数据库设置不支持直接链接,所以我们使用 IntegerField 作为所有者,业务逻辑处理完整性。
问题是 _choices_user() 为丢失的表设置查询。我不明白为什么 django 在第一次运行时没有创建表 auth_user 。如果我删除带有导致模型的应用程序,则测试框架可以正常工作。
有什么想法可以解决这个问题吗?
谢谢!
编辑:我创建了一个数据库设置并尝试了同样的事情。可悲的是它抛出了同样的错误!我现在很困惑。有人也可以测试一下吗?使用 _choices_user 方法创建模型并运行测试。