2014-04-30 7 views
1

J'essaie de créer les tables de base de données pour un projet Django. Il existe une relation ManyToMany entre Arzt et Fachbereich à ArztFachbereich.Django syncdb avec le champ ManytoMany à travers la classe

class Fachbereich(models.Model): 
    id = models.IntegerField(db_column='FachID', primary_key=True) 
    name = models.CharField(db_column='Name', unique=True, max_length=100) 

class Arzt(models.Model): 
    name = models.CharField(max_length=500) 
    fachbereich = models.ManyToManyField(Fachbereich, through=ArztFachbereich) 

class ArztFachbereich(FachbereichUndArztFachbereiche): 
    arzt = models.ForeignKey(Arzt) 
    fachbereich = models.ForeignKey(Fachbereich) 

Après l'exécution syncdb je reçois NameError: nom 'ArztFachbereich' est pas défini

Quand je change de place de Arzt et ArztFachbeeich je reçois le même NameError juste avec Arzt. Existe-t-il un moyen de le faire? Ou devrais-je le faire manuellement dans MySQL?

Répondre

3

Vous devez placer des guillemets autour du modèle transmis à l'argument through.

Modifier à:

fachbereich = models.ManyToManyField(Fachbereich, through='ArztFachbereich') 

Exemple dans docs here.

EDIT:

Comme l'a noté Andrew dans les commentaires, mettre le modèle entre guillemets rend l'évaluation paresseuse, de sorte que le ORM va analyser toutes les classes avant de revenir à elle.

+1

Oui, cela rend l'évaluation de 'ArztFachbereich' paresseuse, de sorte que l'ORM analysera d'abord toutes les classes, puis reviendra et trouvera le champ référencé. –

+0

Merci @AndrewGorcester. Va ajouter pour répondre. – Alex

+0

Vous êtes mon héros! Merci, ça fonctionne. Je construis vraiment ceci avec cet exemple, mais il semble que je n'ai pas pu voir ces citations ^^ – Sehebo