88 votes

Clé étrangère d'une application vers une autre en Django

Je me demande s'il est possible de définir une clé étrangère dans un fichier models.py de Django qui soit une référence à une table dans une autre application ?

En d'autres termes, j'ai deux applications, appelées cf et profiles, et dans cf/models.py j'ai (entre autres choses) :

class Movie(models.Model):
    title = models.CharField(max_length=255)

et dans profiles/models.py je veux avoir :

class MovieProperty(models.Model):
    movie = models.ForeignKey(Movie)

Mais je n'arrive pas à le faire fonctionner. J'ai essayé :

    movie = models.ForeignKey(cf.Movie)

et j'ai essayé d'importer cf.Movie au début de models.py, mais j'obtiens toujours des erreurs, telles que :

NameError: name 'User' is not defined

Est-ce que j'enfreins les règles en essayant de relier deux applications de cette manière, ou est-ce que je me suis simplement trompé dans la syntaxe ?

140voto

Michael Warkentin Points 956

Selon la documentation, votre deuxième tentative devrait fonctionner :

Pour faire référence à des modèles définis dans une autre application, vous devez plutôt spécifier explicitement le label de l'application. Par exemple, si le modèle Fabricant ci-dessus est défini dans une autre application appelée production, vous devrez utiliser :

class Car(models.Model):
    manufacturer = models.ForeignKey('production.Manufacturer')

Avez-vous essayé de le mettre entre guillemets ?

9voto

Ben Points 10335

OK - J'ai compris. Vous pouvez le faire, il suffit d'utiliser la bonne syntaxe d'importation. La syntaxe correcte est :

from prototype.cf.models import Movie

Mon erreur a été de ne pas spécifier la partie ".models" de cette ligne. D'oh !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X