Limitations entre bases de données avec les clés étrangères de Django
Dans Django, bien qu'il soit possible d'utiliser différentes bases de données pour différents modèles, les relations entre bases de données sont restreints. Cela signifie que les relations de clé étrangère ne peuvent pas s'étendre sur différentes bases de données lors de l'utilisation d'un routeur pour partitionner des modèles.
Considérez l'exemple fourni :
<code class="python">class LinkModel(models.Model): # in 'urls' database ... class NewsModel(models.Model): # in default database ... link = models.ForeignKey(LinkModel) ...</code>
Dans ce scénario, une erreur se produira lors de la tentative d'attribution une instance LinkModel de la base de données URL vers le champ de lien du 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>
Limites de Django
Les limitations actuelles de Django empêchent les clés étrangères inter-bases de données et plusieurs à- de nombreuses relations. En effet, de telles relations doivent être définies au sein d'une seule base de données lors de l'utilisation du partitionnement de base de données.
Dépannage et solution
Il existe un problème connu avec la classe Django ForeignKey() , en particulier dans sa méthode validate(). Ce problème existe dans les versions 1.2, 1.3 et 1.4rc1.
Un correctif est disponible pour résoudre ce problème. L'application du correctif devrait éliminer l'erreur et vous permettre d'attribuer des instances LinkModel de différentes bases de données au champ de lien de NewsModel.
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!