2015-11-12 6 views
5

Probleme haben, diesen Fehler loszuwerden.Nullwert in Spalte "last_login" verletzt Nicht-Null-Bedingung

Ich versuche Digital Ocean zu verwenden, um meine Django App bereitzustellen. Ich habe Postgres konfiguriert, aber wenn ich versuche, einen neuen Benutzer in meiner App zu registrieren, bekomme ich dieses Problem.

Ich habe versucht, python manage.py makemigrations und python manage.py migrate laufen und sie funktionieren gut. Die SQL-Migrationen werden bei der Migration abgeschlossen.

+0

Wie möchten Sie den oben genannten Benutzer hinzufügen? Über den Admin-Bereich oder Ihre spezifische Art? Welche Version von Django spielst du? –

+0

versucht, den Benutzer in einer Django-Vorlage zu registrieren, so habe ich Formulareingabefelder und wenn ich das Formular abschicke, reinigt die Views.py es und speichert in db. Meine Version ist 1.8.6 – noobprogrammer

+0

Versuchen Sie, '' aus django.utils importieren Zeitzone' und wo auch immer Sie die 'user' Daten zu speichern, um den neuen' user' hinzufügen vor dem Speichern hinzufügen ' .last_login = timezone.now() ' –

Antwort

5

Versuchen Sie, Ihre Importe hinzu:

from django.utils import timezone 

Dann, wo Sie die user ‚s Daten zu save greifen die neuen user vor dem save Verfahren hinzufügen:

<user_object>.last_login = timezone.now() 
+0

Gibt es einen Grund, warum wir keinen Null-Wert für das Feld' last_login' verwenden können? Laut Django 1.8-Release-Dokumenten sollten wir einen Null-Wert für das 'last_login'-Feld von Djangos AbstractUser-Modell verwenden können: https://docs.djangoproject.com/en/1.8/releases/1.8/#abstractuser-last- login-allows-null-values ​​Aber ich bekam den Fehler "not-null constraint", wenn 'last_login' nicht definiert wurde, was für Django 1.7 sinnvoll wäre, aber nicht für 1.8 – modulitos

+0

Wenn Sie die neuen Migrationen nicht ausgeführt haben aus dem 'django.contrib.auth' Paket, das mit 1.8+ Distribution gebündelt ist, wird dieser Hack-Job in den meisten Fällen garantiert funktionieren. Ich glaube, dass es eine Validierung auf Datenbankebene gibt, die mit [migration 0005] (https://github.com/django/django/blob/master/django/contrib/auth/migrations/0005_alter_user_last_login_null.py) geändert wird. –

+0

Ach ja, du hast Recht. Ich konnte dies debuggen, indem ich auf die psql-Eingabeaufforderung zugreife und '\ d auth_user' ausführte (in meinem Fall war 'auth_user' der' db_table'-Name für mein AUTH_USER_MODEL), was zeigte, dass 'last_login' nicht Nullable war. Nachdem ich './manage.py showmigrations --list 'ausgeführt hatte, erkannte ich, dass meine Migrationen falsch angewendet wurden. – modulitos

3

ich von django Upgrade wurde 1.7 zu Django 1.10, als ich darauf stieß. Am Ende musste ich python manage.py migrate ausführen, um die Datenbanktabellen und -spalten zu aktualisieren.

+0

Dieser war die richtige Antwort für mich! – martincho

+0

Woo! Jemand hat meine Antwort gelesen! Schön, dass es auch für dich funktioniert hat! – teewuane

+0

Eine kurze Antwort, aber mit vielen Vorteilen, danke –

Verwandte Themen