ホームページ  >  記事  >  データベース  >  Django の外部キーは異なるデータベースにまたがることはできますか?

Django の外部キーは異なるデータベースにまたがることはできますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-02 03:53:30969ブラウズ

Can Django Foreign Keys Span Different Databases?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。