2015-11-12 52 views
5

有問題擺脫此錯誤。列「last_login」中的空值違反非空約束

我正在嘗試使用Digital Ocean來部署我的Django應用程序。我配置了Postgres,但是當我嘗試在我的應用程序中註冊一個新用戶時,我遇到了這個問題。

我試過運行python manage.py makemigrationspython manage.py migrate,它們工作正常。 SQL遷移在遷移後完成。

+0

你如何試圖添加上述用戶?通過管理窗格或您的具體方式?你運行的是什麼版本的Django? –

+0

試圖在django模板中註冊用戶,所以我有表單輸入字段,當我提交表單時,views.py將清除它並保存到數據庫。我的版本是1.8.6 – noobprogrammer

+0

嘗試在保存程序'.last_login = timezone.now()之前,添加'from django.utils import timezone'和無論您抓取用戶數據以保存新用戶數據的位置, ' –

回答

5

嘗試添加到您的進口:

from django.utils import timezone 

那麼無論你搶user的數據saveusersave過程之前添加:

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

有沒有什麼理由不能爲'last_login'字段使用空值?根據Django 1.8發佈文檔,我們應該能夠爲Django的AbstractUser模型的'last_login'字段使用空值:https://docs.djangoproject.com/en/1.8/releases/1.8/#abstractuser-last- login-allow-null-values但是當last_login沒有被定義時,我得到了「not-null constraint」錯誤,這對於Django 1.7有意義,但對於1.8 – modulitos

+0

沒有意義如果你還沒有運行新的遷移從與1.8+發行捆綁在一起的'django.contrib.auth'包中,這個黑客工作可以保證在大多數情況下工作。我覺得有數據庫級別的驗證會隨[遷移0005](https://github.com/django/django/blob/master/django/contrib/auth/migrations/0005_alter_user_last_login_null.py)而改變。 –

+0

啊,是的,你是對的。我可以通過訪問psql提示符並運行'\ d auth_user'(在我的例子中,'auth_user'是我的AUTH_USER_MODEL的'db_table'名稱]來調試,這表明'last_login'不可爲空。之後,並運行'./manage.py showmigrations --list',我意識到我的遷移被錯誤地應用。 – modulitos

3

我是從Django的升級1.7到Django 1.10當我碰到這個。結果是我需要運行python manage.py migrate來更新數據庫表和列。

+0

這一個是我的正確答案! – martincho

+0

嗚!有人讀我的答案!很高興爲你效勞! – teewuane

+0

簡短的回答,但有很多好處,謝謝 –

相關問題