Django 测试无法 运行 迁移

Django test fails to run migrations

我正在尝试 运行 一个测试脚本,遵循 this django doc(这里使用的版本)。它很快就会因长堆栈而失败。我已经选择了可能的罪魁祸首。

  File "/home/user11/app-master/en/lib/python3.8/site-packages/django/db/migrations/operations/special.py", line 190, in database_forwards
    self.code(from_state.apps, schema_editor)
  File "/home/user11/app-master/app/colegiados/migrations/0002_auto_20200128_1646.py", line 185, in migrate
    add_sistema_entidade_e_orgao_composicao(apps, sistema)
  File "/home/user11/app-master/app/colegiados/migrations/0002_auto_20200128_1646.py", line 16, in add_sistema_entidade_e_orgao_composicao
    user = get_user(apps)
  File "/home/user11/app-master/app/colegiados/migrations/0002_auto_20200128_1646.py", line 7, in get_user
    return User.objects.filter(
  File "/home/user11/app-master/en/lib/python3.8/site-packages/django/db/models/query.py", line 318, in __getitem__
    return qs._result_cache[0]
IndexError: list index out of range

作为解决方法,我修改了 django 的 query.py

if qs._result_cache:
  return qs._result_cache[0]
else: 
  return ""

哪个有效,直到出现下一个错误:

  File "/home/user11/app-master/en/lib/python3.8/site-packages/django/db/migrations/operations/special.py", line 190, in database_forwards
    self.code(from_state.apps, schema_editor)
  File "/home/user11/app-master/app/core/migrations/0016_auto_20201120_0934.py", line 106, in migrate
    sistema = Sistema.objects.get(nom_alias=sistema)
  File "/home/user11/app-master/en/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/home/user11/app-master/en/lib/python3.8/site-packages/django/db/models/query.py", line 439, in get
    raise self.model.DoesNotExist(
__fake__.DoesNotExist: Sistema matching query does not exist.

现在我卡住了。 test_database 是用所有 table 创建的,直到这些迁移错误为止,其中绝大多数都缺少任何数据。在那些空的是最后一个错误似乎指的 table。

请注意,我不是开发人员,我没有参与创建正在使用的数据库,也没有参与任何迁移。我强烈怀疑数据库 (Postgres12) 必须是来自“最小”备份的 created/restored,迁移才能正常进行。这可能是这些失败的原因吗?如果是这样,对于 运行 不改变已部署数据库的 Django 测试,我有什么选择? 运行将测试作为查询块然后进行回滚的任何选项,因为它使用的是 Postgres?

在与团队其他成员讨论后,决定重置所有迁移以确保此类问题不再发生。也许不是“预期”的解决方案,而是一个不错的解决方案。