2012-03-13 21 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