Rumah  >  Artikel  >  pangkalan data  >  Bolehkah Kunci Asing Django Menjangkau Pangkalan Data Berbeza?

Bolehkah Kunci Asing Django Menjangkau Pangkalan Data Berbeza?

Susan Sarandon
Susan Sarandonasal
2024-11-02 03:53:30893semak imbas

Can Django Foreign Keys Span Different Databases?

Had Merentas Pangkalan Data dengan Kunci Asing Django

Dalam Django, sementara anda boleh menggunakan pangkalan data yang berbeza untuk pelbagai model, perhubungan silang pangkalan data adalah terhad. Ini bermakna perhubungan kunci asing tidak boleh menjangkau pangkalan data yang berbeza apabila menggunakan penghala untuk membahagikan model.

Pertimbangkan contoh yang diberikan:

<code class="python">class LinkModel(models.Model): # in 'urls' database
    ...

class NewsModel(models.Model):  # in default database
    ...
    link = models.ForeignKey(LinkModel)
    ...</code>

Dalam senario ini, ralat akan timbul apabila cuba menetapkan contoh LinkModel daripada pangkalan data url ke medan pautan NewsModel:

<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>

Had Django

Had semasa Django menghalang kunci asing silang pangkalan data dan banyak ke- banyak perhubungan. Ini kerana sebarang perhubungan sedemikian mesti ditakrifkan dalam satu pangkalan data apabila menggunakan pembahagian pangkalan data.

Selesaikan Masalah dan Penyelesaian

Terdapat isu yang diketahui dengan kelas Django ForeignKey() , khususnya dalam kaedah validate(). Isu ini wujud dalam versi 1.2, 1.3 dan 1.4rc1.

Tampung tersedia untuk menyelesaikan isu ini. Menggunakan tampalan sepatutnya menimbulkan ralat dan membolehkan anda menetapkan tika LinkModel daripada pangkalan data berbeza kepada medan pautan NewsModel.

Atas ialah kandungan terperinci Bolehkah Kunci Asing Django Menjangkau Pangkalan Data Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn