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!