Django 1.8 添加新用户时的完整性错误



我将一个旧的 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 值的迁移。

最新更新