Heim > Datenbank > MySQL-Tutorial > Hauptteil

Können Django-Fremdschlüssel verschiedene Datenbanken umfassen?

Susan Sarandon
Freigeben: 2024-11-02 03:53:30
Original
961 Leute haben es durchsucht

Can Django Foreign Keys Span Different Databases?

Datenbankübergreifende Einschränkungen mit Django-Fremdschlüsseln

In Django ist es zwar möglich, verschiedene Datenbanken für verschiedene Modelle und datenbankübergreifende Beziehungen zu verwenden sind eingeschränkt. Dies bedeutet, dass sich Fremdschlüsselbeziehungen nicht über verschiedene Datenbanken erstrecken können, wenn ein Router zum Partitionieren von Modellen verwendet wird.

Betrachten Sie das bereitgestellte Beispiel:

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

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

In diesem Szenario tritt beim Zuweisungsversuch ein Fehler auf eine LinkModel-Instanz von der URL-Datenbank zum Linkfeld des 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>
Nach dem Login kopieren

Django-Einschränkungen

Djangos aktuelle Einschränkungen verhindern datenbankübergreifende Fremdschlüssel- und Many-to- viele Beziehungen. Dies liegt daran, dass solche Beziehungen innerhalb einer einzelnen Datenbank definiert werden müssen, wenn die Datenbankpartitionierung verwendet wird.

Fehlerbehebung und Lösung

Es gibt ein bekanntes Problem mit der Django ForeignKey()-Klasse , insbesondere in seiner Methode „validate()“. Dieses Problem besteht in den Versionen 1.2, 1.3 und 1.4rc1.

Ein Patch ist verfügbar, um dieses Problem zu beheben. Durch Anwenden des Patches sollte der Fehler behoben werden und Sie können LinkModel-Instanzen aus verschiedenen Datenbanken dem Linkfeld von NewsModel zuweisen.

Das obige ist der detaillierte Inhalt vonKönnen Django-Fremdschlüssel verschiedene Datenbanken umfassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage