Heim  >  Artikel  >  Datenbank  >  Können Django-Fremdschlüssel verschiedene Datenbanken umfassen?

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

Susan Sarandon
Susan SarandonOriginal
2024-11-02 03:53:30893Durchsuche

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>

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>

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!

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