Django 外部キーによるデータベース間の制限
Django では、さまざまなモデルに異なるデータベースを使用できますが、データベース間の関係制限されています。これは、ルーターを使用してモデルを分割する場合、外部キー関係が異なるデータベースにまたがることはできないことを意味します。
次の例を考えてみましょう。
<code class="python">class LinkModel(models.Model): # in 'urls' database ... class NewsModel(models.Model): # in default database ... link = models.ForeignKey(LinkModel) ...</code>
このシナリオでは、割り当てを試行するとエラーが発生します。 URL データベースから NewsModel のリンク フィールドへの LinkModel インスタンス:
<code class="python">newsItem, created = NewsModel.objects.get_or_create( title="test" ) link = LinkModel.objects.using('urls').get( id=1 ) newsItem.link = link # error!</code>
Django の制限
Django の現在の制限により、データベース間の外部キーと多対多くの関係。これは、データベース パーティショニングを使用する場合、そのような関係は単一のデータベース内で定義する必要があるためです。
トラブルシューティングと解決策
Django のForeignKey() クラスには既知の問題があります。 、具体的には validate() メソッド内です。この問題はバージョン 1.2、1.3、および 1.4rc1 に存在します。
この問題を解決するパッチが利用可能です。パッチを適用するとエラーが解決され、別のデータベースから LinkModel インスタンスを NewsModel のリンク フィールドに割り当てることができるようになります。
以上がDjango の外部キーは異なるデータベースにまたがることはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。