現在、django アプリケーションのテストを書いています。残念ながら、複数のデータベース レイアウトを使用する必要があり、これを変更することはできません。(複数のデータセンターにまたがる異なるサーバーに複数のバックエンドを持つ分散データベース)
2 つのデータベースがあります。
- 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を作成しない理由です。原因となっているモデルのアプリを削除すると、テスト フレームワークは問題なく動作しています。
これを修正する方法はありますか?
ありがとう!
編集:1つのデータベース設定を作成し、同じことを試しました. 悲しいことに、同じエラーがスローされます。今、混乱しています。誰かがこれもテストできますか?_choices_user メソッドでモデルを作成し、テストを実行します。