2017-11-29 7 views
1

Ich erstelle ein Populations-Skript von einer MysqlDatabase zu Django Models.
Im Looping durch meine Daten aus dem Mysql empfangen und das geht gut.Django get_or_create gibt False zurück

Jetzt muss ich es in die Datenbank Django schreiben ...

mdl, succeeded = models.User.objects.get_or_create(
    name=name, 
    password=password, 
    email=email 
) 

ich drucke succeeded so kann ich sehen, was das Feedback ist, aber alles, es gibt mir ist False

Meine Django Modell User bearbeitet wird, so dass alle Felder blank sein können und ermöglicht NULL oder haben eine Standard

My Model User:

username = models.CharField(max_length=20, blank=True, null=True) 
slug = models.SlugField(null=True, blank=True) 
email = models.EmailField(unique=True, null=True) 
name = models.CharField("First and last name", max_length=100) 
uses_metric = models.BooleanField(default=True) 
position = models.CharField("Position", max_length=70, blank=True, null=True,) 
utility = models.ForeignKey(Utility, default=1, blank=True, null=True) 
supplier = models.ForeignKey(Supplier, default=1, blank=True, null=True) 
currency = models.ForeignKey(Currency, default=1) 
phone = models.CharField("Direct phone number", max_length=40, blank=True, default='+') 
gets_notifications_on_reply = models.BooleanField("Receive notifications", default=False) 
memberlist = models.BooleanField("Show member in memberslist", default=True) 
registration_date = models.IntegerField(default=floor(time.time()), blank=True, null=True) 
is_staff = models.BooleanField(
    _('staff status'), 
    default=False, 
    help_text=_('Designates whether the user can log into this site.'), 
) 
is_active = models.BooleanField(
    _('active'), 
    default=True, 
    help_text=_(
     'Designates whether this user should be treated as active. ' 
     'Deselect this instead of deleting accounts.' 
    ), 
) 
USERNAME_FIELD = 'email' 

Antwort

4

Bitte überprüfen Sie Ihre Datenbank. Dies bedeutet, dass die Benutzerobjekte, die Sie von dort abfragen, bereits existieren. Dies kann daran liegen, dass das Objekt bereits existiert oder der Code nicht die richtige Datenbank verwendet. Da Migrationen häufig mehrere Datenbanken verwenden, könnte dies ebenfalls ein Problem darstellen.

According to the Django documentation, hat get_or_create() nicht ein Objekt zurückgeben und einen Status succeeded sondern einen Flag created, die neu oder bereits in der Datenbank existiert erstellt worden, wenn dieses Objekt angibt. Wenn es bereits existiert, ist das created Flag (succeeded in Ihrem Code) False.

Wenn Sie sicherstellen möchten, dass der Fehler nicht auf bereits vorhandene Objekte zurückzuführen ist, nehmen Sie ein Datenpaar, für das created false ist, und versuchen Sie, es mithilfe der get()-Methode des Modells abzurufen. Wenn dies einen DoesNotExist Fehler verursacht, dann ist etwas anderes das Problem. Wenn es ein Objekt zurückgibt, dann existiert dieses Objekt bereits.

+0

Ich abgeschnitten meine Tabelle, so dass das nicht das Problem ist, denke ich ... – LenapCapo

+0

+ Ich habe versucht, auch erstellt, tat genau das gleiche. :( – LenapCapo

+0

Umbenennen der Flagge wird nicht ändern, dass es die gleichen Informationen hat. Bitte überprüfen Sie erneut, dass Sie wirklich alle neuen Daten entfernt oder versuchen Sie mit anderen Werten. Gibt es immer 'False' oder nur auf einige Anfragen zurück? Es könnte auch sein dass Sie versuchen, die gleichen Daten zweimal zu importieren.Sie könnten das auch überprüfen, indem Sie die gleichen Daten verwenden, um nur einen Benutzer zu "holen"() Wenn es Ihnen gelingt, einen Benutzer zurückzugeben, dann existierte er vorher. – ingofreyer