4

我已经更改了 django.contrib.auth.user 模型,我已将电子邮件 ID 设为唯一。之后我添加了一个数据迁移以反映相同-

  • python manage.py datamigration appname unique_password。其次是 python manage.py schemamigration appname --auto-->no changes。最后,python manage.py migrate appname。

  • 向前迁移到 0003_unique_password

  • 应用程序名称:0037_unique_password.py

现在,当我添加一个电子邮件不是唯一的用户时,它会给我一个错误,并且不允许我通过django admin创建用户。但是当我这样做时:>

  • python manage.py 外壳

  • 从 django.contrib.auth.models 导入用户

  • user=User('cust1','123','xxx@gmail.com') 这会创建一个用户对象,即使 'xxx@gmail.com' 已经存在。

如何为现有项目(带有数据)向 django.contrib.auth.user.email 添加唯一约束?

4

1 回答 1

1

根据模型验证文档,在模型验证期间检查唯一性。调用save()模型不会自动导致模型验证。管理应用程序调用模型验证。

没有什么能阻止您在 Python 中创建User对象,例如user=User('cust1','123','xxx@gmail.com')然后执行user.save(). 如果在数据库级别进行唯一性检查,此时您可能会遇到异常。如果您想在保存之前进行检查,请调用is_valid()模型实例。

如果您希望User在保存之前自动验证每个对象,请在保存继续之前使用pre_save Django 信号进行模型验证。

于 2013-01-15T06:05:41.470 回答