2017-01-05 2 views
0

Ich habe versucht, ein ManyToManyField Benutzer zuerst eine OneToOneField-Beziehung zu verwenden. Hier ist mein Code:Django OneToOne Felder an Benutzer Programmierung Fehler

ENTERPRISE_TYPE_CHOICES = (
    ('a', "A"), 
    ('b', "B"), 
    ('c', "C"), 
) 

class Enterprise(models.Model): 
    et_type = models.CharField(
     max_length = 10, 
     choices=ENTERPRISE_TYPE_CHOICES, 
     default='a' 
     ) 
    name = models.TextField(max_length=100) 
    number = models.TextField(max_length=7) 

    def __str__(self): 
     return "%s %s %s" % (self.et_type, self.name, self.number) 

class Secretaire(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    workshop = models.ManyToManyField(Enterprise) 

@receiver(post_save, sender=User) 
def create_user_secretaire(sender, instance, created, **kwargs): 
    if created: 
     Secretaire.objects.create(user=instance) 

@receiver(post_save, sender=User) 
def save_user_secretaire(sender, instance, **kwargs): 
    instance.profile.save() 

Dann in der Python manage.py Shell Ich versuche:

from django.contrib.auth.models import User 
u = User.objects.create(username="a", email="[email protected]", password="a") 

Und es um den Fehler werfen:

ProgrammingError: Beziehung "helpdesk_secretaire" existiert nicht ZEILE 1: INSERT IN "helpdesk_secretaire" ("user_id") WERTE (11) RE ...

(Der Benutzer ist immer noch erstellt, aber kein Zugriff auf user.secretaire, it wirft den gleichen Fehler)

Haben Sie eine Ahnung, warum ich diesen Fehler bekomme?

+1

Sicher haben Sie makemigrations und migrieren? – e4c5

+0

Haben Sie Ihre Migrationen erstellt und ausgeführt? –

+0

... Vielen Dank. –

Antwort

1

Wie die Kommentare zur ursprünglichen Frage: Sie müssen zunächst makemigrations und migrate ausführen. Die Fehlermeldung, die Sie erhalten, zeigt an, dass die Tabelle nicht in der Datenbank vorhanden ist.