2015-11-12 48 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

简短的回答,但有很多好处,谢谢 –

相关问题