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