2012-03-13 57 views
1
from django.contrib.auth.models import User 

a = User.objects.create_user("1","2","3") 
b = User.objects.create_user("1","2","3") 

没有错误...为什么django的create_user方法不能验证唯一性?但

a.validate_unique() 
ValidationError: {'username': [u'User with this Username already exists.']} 

我希望当B正在保存为create_user部分接收验证错误。

看着Django Model Instance Reference,'保存时会发生什么'一节没有描述任何时候的保存。

这是一个故意的设计决定还是由于使用django-nonrel造成的副作用?我希望关系数据库能够返回一个IntegrityError或类似的东西。

回答

3

您可能正在使用不支持唯一键约束的SQLite。

create_user假设您已经完成了所有需要的检查,通常在一个表单的验证函数中。它给你足够的绳索来挂上。

+0

谢谢!我使用的是Django-nonrel(与Mongo),但我希望Mongo能够很好地遵循唯一性约束。 我的解决方案最终创建了我自己的create_user函数,它在提交之前进行了验证;这听起来合理吗? (我没有使用表单来创建他的用户)。 – AlexeyMK 2012-03-23 04:49:46

+0

这几乎是正常的做事方式。数据库约束实际上是最后一道防线,当它们触发时不会告诉你什么,所以最好在提交到数据库之前彻底验证输入。 – 2012-03-23 13:40:05