Maison  >  Article  >  base de données  >  Comment gérer les relations de clés étrangères avec des modèles dans différentes bases de données dans Django ?

Comment gérer les relations de clés étrangères avec des modèles dans différentes bases de données dans Django ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-29 19:59:02161parcourir

How to Handle Foreign Key Relationships with Models in Different Databases in Django?

Contraintes de clés étrangères et de bases de données croisées

Lorsque vous travaillez avec des modèles Django stockés dans différentes bases de données, un problème courant survient avec les clés étrangères . Par exemple, considérons ce qui suit :

class LinkModel(models.Model): # dans la base de données 'urls'</p>
<pre class="brush:php;toolbar:false">id = models.AutoField(primary_key=True)
host_id = models.IntegerField()
path = models.CharField(max_length=255)

class NewsModel(models.Model): # dans base de données par défaut

id = models.AutoField(primary_key=True)
title = models.CharField(max_length=50)
link = models.ForeignKey(LinkModel)

Lors de la tentative d'attribution d'une clé étrangère à un modèle à partir d'une base de données différente, une erreur sera générée :

< ;pre>Impossible d'attribuer "": l'instance est sur la base de données "par défaut", la valeur est sur la base de données "urls"

Cela se produit car Django ne le fait pas prend actuellement en charge les relations de clés étrangères entre bases de données. Toutes les relations de clé étrangère doivent être définies dans une seule base de données.

Surmonter la limitation

Pour résoudre ce problème, vous pouvez soit créer un routeur pour acheminer explicitement votre modèles vers des bases de données spécifiques ou envisagez d'utiliser un système de gestion de bases de données relationnelles (SGBDR) qui prend en charge les relations entre bases de données. Actuellement, Django ne fournit pas de solution prête à l'emploi pour de telles relations.

Vous pouvez également essayer d'appliquer un correctif à la classe ForeignKey() pour résoudre ce problème, comme décrit dans le ticket lié. .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn