2017-12-05 3 views
0

Ich versuche ein System zu implementieren, das für zwei Profile Modellobjekte ein Teil eines Pair Modellobjekts sein kann.Viele-zu-viele-Beziehung mit 'durch' Modell Fehler bei der Migration

Hier wird das Profil ist durch ein Paar Modell gefolgt:

class Profile(models.Model): 
    user = models.OneToOneField(settings.AUTH_USER_MODEL, 
           on_delete=models.CASCADE, 
           null=True, blank=True) 
    pair = models.ManyToManyField('self', through='Pair', 
            symmetrical=False, 
            related_name='pair_to+') 

class Pair(models.Model): 
    requester = models.ForeignKey(Profile, related_name='pairing_requester') 
    accepter = models.ForeignKey(Profile, related_name='pairing_accepter') 
    requester_learns = models.CharField(max_length=60, null=True) 
    requester_teaches = models.CharField(max_length=60, null=True) 

Die Beziehung zwischen den Profilen soll, dass symmetrisch sein, so (profile1, profile2) ein einzigartiges Objekt ist, und ich soll ein (profile2 nicht erwarten, profile1) erstellt werden.

Also pro this article, Ich versuche, die Beziehung zu erstellen.

Nach makemigrations, erhalte ich die Fehlermeldung:

ERRORS: 
<function ManyToManyField.contribute_to_class.<locals>.resolve_through_model at 0x1044b47b8>: (models.E022) <function ManyToManyField.contribute_to_class.<locals>.resolve_through_model at 0x1044b47b8> contains a lazy reference to user_profile.pair, but app 'user_profile' doesn't provide model 'pair'. 
user_profile.Profile.pair: (fields.E331) Field specifies a many-to-many relation through model 'Pair', which has not been installed. 

Was mache ich falsch?

Antwort

1
class Pair(models.Model): 
    requester = models.ForeignKey(Profile, related_name='pairing_requester') 
    accepter = models.ForeignKey(Profile, related_name='pairing_accepter') 
    requester_learns = models.CharField(max_length=60, null=True) 
    requester_teaches = models.CharField(max_length=60, null=True) 

class Profile(models.Model): 
    user = models.OneToOneField(settings.AUTH_USER_MODEL, 
           on_delete=models.CASCADE, 
           null=True, blank=True) 
    pair = models.ManyToManyField('self', through='Pair', 
            symmetrical=False, 
            related_name='pair_to+') 

das, was Sie falsch tun, ist Ihnen das Modell erwähnen müssen, bevor sie eine Beziehung zu einem anderen Modell aufrufen, wird django PAIR Modell erstellen erste wird dann Modell auf das andere Modell installieren. Verwenden Sie dies und bevor Sie die Migration durchführen, löschen Sie die alten Migrationsdateien

+0

Dann gibt es keine Möglichkeit, sie in verschiedenen models.py-Dateien zu behalten? – Homer

+0

Sie können es behalten, aber Sie müssen zuerst die Tabelle erstellen, bevor Sie es aufnehmen, sonst würde Django nicht verstehen, zu welcher Tabelle es auch Beziehung erstellen wird, da die Tabelle beim Erstellen der Relation – Exprator

+0

nicht existiert Migrationen und Migrieren des Pair-Modells zuerst allein, aber den gleichen Fehler erhalten. Könnte es sich darauf beziehen, das Paarmodell als Zeichenfolge im Profilmodell anzugeben? – Homer

Verwandte Themen