我将旧的Django应用程序从1.4移动到1.8,主应用程序中的所有内容都运行良好。然后我需要将所有内容从服务器1复制到服务器2,并且在此过程中只是将管理数据库的mysql数据转储并安装到新数据库中。
一切都很好,但是在创建新用户时我得到了: / admin / auth / user / add /中的IntegrityError (1048,“列'last_login'不能为空”)
这是一个包含30个帐户的实时系统。我在网上找到了各种解决方案,但我想确保它不会破坏我的数据库。
我只需要修复管理数据库。我的业务端数据库和表不是由Django管理的,而是一个自定义模式(我继承了)。
顺便说一句,删除用户工作正常。
答案 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)
您的错误表明您尚未运行允许该列为空值的迁移。