Maison > Article > base de données > Comment implémenter des clés étrangères dans différentes bases de données dans Django lorsque je suis confronté à des limitations ?
Dans Django, l'utilisation de clés étrangères est cruciale pour établir des relations entre les objets stockés sur plusieurs bases de données. Cependant, ce processus peut présenter un défi lorsque des modèles pour différentes bases de données sont impliqués.
Django interdit actuellement les relations de clés étrangères entre modèles résidant dans des bases de données distinctes. Cette restriction provient de l'absence de prise en charge des relations entre bases de données. Si vous utilisez un routeur de base de données pour partitionner les modèles, les relations de clé étrangère doivent être limitées au sein d'une seule base de données.
L'erreur rencontré dans votre code provient de la tentative d'attribuer une instance LinkModel de la base de données "urls" à une instance NewsModel de la base de données par défaut. Étant donné que ces modèles appartiennent à des bases de données différentes, Django génère une erreur empêchant cette affectation.
Pour contourner cette limitation, vous pouvez implémentez une solution de contournement personnalisée. Au lieu d'attribuer l'instance LinkModel directement via le champ de lien du NewsModel, définissez manuellement le champ de clé étrangère dans la base de données :
<code class="python">from django.db import connection # Retrieve the LinkModel instance from the database link = LinkModel.objects.using('urls').get(id=1) # Execute a raw SQL query to update the foreign key value in the default database with connection.cursor() as cursor: cursor.execute( "UPDATE news SET link_id = %s WHERE title = %s", [link.id, "test"] )</code>
Cette approche met à jour manuellement la valeur de la clé étrangère dans la base de données par défaut, liant efficacement l'élément d'actualité. à l'instance LinkModel souhaitée.
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!