私はdjango-pagetreeライブラリにDjango 2.0サポートを追加する作業をしています。自動テスト中にsqliteのインメモリデータベースを使用すると、次のような一連のエラーが発生します。
File "/home/nnyby/src/django-pagetree/pagetree/tests/test_models.py", line 638, in setUp
'children': [],
File "/home/nnyby/src/django-pagetree/pagetree/models.py", line 586, in add_child_section_from_dict
...
File "/home/nnyby/src/django-pagetree/venv/lib/python3.5/site-packages/django/db/backends/base/base.py", line 239, in _commit
return self.connection.commit()
django.db.utils.IntegrityError: FOREIGN KEY constraint failed
これはDjango 2.0リリースノートに記載されています:https : //docs.djangoproject.com/en/2.0/releases/2.0/#foreign-key-constraints-are-now-enabled-on-sqlite
完全に理解していないその説明から、これは永続的でないテストデータベースには当てはまりませんよね?Django 2.0を使用する場合、私のsqliteテストデータベースは適切なオプションを使用して作成されませんか?
テストに使用しているアプリの設定は次のとおりです。https://github.com/ccnmtl/django-pagetree/blob/master/runtests.py
ドキュメントには2つのことが書かれています。
ForeignKey制約がある場合は、データベースレベルで適用されます。したがって、外部キー制約に違反していないことを確認してください。それが問題の最も可能性の高い原因ですが、他のデータベースでこれらの問題が発生したことを意味します。コードで次のようなパターンを探します。
# in pagetree/models.py, line 810
@classmethod
def create_from_dict(cls, d):
return cls.objects.create() # what happens to d by the way?
これは必ずPageBlock
必要なため、ForeignKey制約エラーで失敗しますsection
。そのため、create
最初にそれを割り当てずに呼び出すことはできません。
(たとえば)アトミックトランザクションを実行して外部キーの制約を回避し、外部キーのコミットを延期する場合は、外部キーを初期に遅延させる必要があります。確かに、毎回再構築されるので、テストデータベースはすでにそれを持っているはずです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加