添加新用户时Django 1.8 IntegrityError

时间:2017-12-08 21:56:34

标签: django

我将旧的Django应用程序从1.4移动到1.8,主应用程序中的所有内容都运行良好。然后我需要将所有内容从服务器1复制到服务器2,并且在此过程中只是将管理数据库的mysql数据转储并安装到新数据库中。

一切都很好,但是在创建新用户时我得到了: / admin / auth / user / add /中的IntegrityError (1048,“列'last_login'不能为空”)

这是一个包含30个帐户的实时系统。我在网上找到了各种解决方案,但我想确保它不会破坏我的数据库。

我只需要修复管理数据库。我的业务端数据库和表不是由Django管理的,而是一个自定义模式(我继承了)。

顺便说一句,删除用户工作正常。

1 个答案:

答案 0 :(得分:0)

这是described in the release notes,以及迁移数据库以允许空值的步骤:

  

AbstractUser.last_login字段现在允许空值。以前,它默认为创建用户的时间,如果用户从未登录,则会产生误导。如果您使用的是默认用户(django.contrib.auth.models.User),请运行contrib.auth中包含的数据库迁移。

     

如果您使用的是继承自AbstractUser的自定义用户模型,则需要运行makemigrations并为包含该模型的应用生成迁移。此外,如果希望为尚未登录的用户将last_login设置为NULL,则可以运行此查询:

     

来自django.db导入模型      来自django.contrib.auth import get_user_model      来自django.contrib.auth.models导入AbstractBaseUser

UserModel = get_user_model()
if issubclass(UserModel, AbstractBaseUser):
    UserModel._default_manager.filter(
        last_login=models.F('date_joined')
    ).update(last_login=None)

您的错误表明您尚未运行允许该列为空值的迁移。