Je me demande s'il est possible de définir une clé étrangère dans un fichier models.py dans Django qui est 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):
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 ne peux 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 je reçois toujours des erreurs, telles que:
NameError: name 'User' is not defined
Suis-je en train d'enfreindre les règles en essayant de lier deux applications ensemble de cette manière, ou ai-je juste une mauvaise syntaxe?
Selon les documents, votre deuxième tentative devrait fonctionner:
Pour faire référence aux modèles définis dans une autre application, vous devez plutôt spécifier explicitement le libellé de l'application. Par exemple, si le modèle Fabricant ci-dessus est défini dans une autre application appelée production, vous devez utiliser:
class Car(models.Model):
manufacturer = models.ForeignKey('production.Manufacturer')
Avez-vous essayé de le mettre entre guillemets?
Il est également possible de passer la classe elle-même:
from Django.db import models
from production import models as production_models
class Car(models.Model):
manufacturer = models.ForeignKey(production_models.Manufacturer)
OK - je l'ai compris. Vous pouvez le faire, il vous suffit d'utiliser la bonne syntaxe import
. La syntaxe correcte est:
from prototype.cf.models import Movie
Mon erreur ne spécifiait pas le .models
partie de cette ligne. Oh!