django.contrib.auth.user的唯一电子邮件约束

时间:2013-01-10 10:47:01

标签: django django-models django-south django-authentication

我更改了django.contrib.auth.user模型,其中我将电子邮件ID设置为唯一。之后我添加了一个数据迁移来反映相同的内容 -

  • python manage.py datamigration appname unique_password。 其次是python manage.py schemamigration appname --auto - >没有变化。最后,python manage.py迁移appname。

  • 向前迁移到0003_unique_password

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

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

  • python manage.py shell

  • 来自django.contrib.auth.models导入用户

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

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

1 个答案:

答案 0 :(得分:1)

根据模型验证documentation检查模型验证期间是否存在唯一性。在模型上调用save()不会自动导致模型验证。管理员应用程序调用模型验证。

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

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