我更改了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
现在,当我添加一个电子邮件不唯一的用户时,它会给我一个错误,并且不允许我通过 django admin 创建用户。但当我这样做时: >
python manage.py shell
来自django.contrib.auth.models导入用户
如何为现有项目(包含数据)添加唯一约束到django.contrib.auth.user.email?
答案 0 :(得分:1)
根据模型验证documentation检查模型验证期间是否存在唯一性。在模型上调用save()
不会自动导致模型验证。管理员应用程序将调用模型验证。
没有什么能阻止您在Python中创建User
对象,例如user=User('cust1','123','xxx@gmail.com')
,然后执行user.save()
。如果在数据库级别存在唯一性检查,则此时可能会出现异常。如果要在执行保存之前进行检查,请在Model实例上调用is_valid()
。
如果希望在保存之前自动验证每个User
对象,请在保存进行之前使用pre_save Django信号进行模型验证。