2013-01-10 45 views
4

我已經更改了django.contrib.auth.user模型,我已將電子郵件ID設置爲唯一。這之後,我加入了datamigration以反映各項─django.contrib.auth.user的唯一電子郵件限制

  • 蟒蛇manage.py datamigration APPNAME unique_password。 後面跟着python manage.py schemamigration appname --auto - > no changes。最後,python manage.py遷移appname。

  • 遷移轉發到0003_unique_password

  • 應用程序的名字:0037_unique_password.py

現在,當我加入其電子郵件是不是唯一的一個用戶,它給了我一個錯誤,不會讓我創建用戶通過django admin。但是,當我做: >

  • 蟒manage.py殼

  • 從django.contrib.auth.models導入用戶

  • 用戶=用戶( 'cust1', '123' ,'xxx @ gmail.com') 即使'[email protected]'已經存在,這將創建一個用戶對象。

如何爲現有項目(包含數據)的django.contrib.auth.user.email添加唯一約束?

回答

1

根據型號驗證documentation在模型驗證期間檢查唯一性。在模型上調用save()不會自動導致模型驗證。管理應用程序正在調用模型驗證。

沒有什麼能阻止你在Python中創建一個User對象,如user=User('cust1','123','[email protected]'),然後做一個user.save()。如果在數據庫級別進行唯一性檢查,那麼此時可能會出現異常。如果您想在保存前檢查,請在Model實例上調用is_valid()

如果您希望每個User對象在保存前自動驗證,請在保存過程之前使用 Django信號進行模型驗證。

+0

謝謝奧斯汀......但是如果我能在db級別做更多的事情?? !! –

+0

您的遷移應該添加了db級別的限制。你的問題暗示'User('cust1','123','[email protected]')。save()'當數據庫中已經存在'xxx @ gmail.com'時不會產生異常? –

+0

是的。它不會創建一個例外。它只是將這些值添加到數據庫:| –