我有一個Django應用程序使用django-registration來處理新的用戶註冊。我想在登記表上添加出生日期,以便在決定是否允許他們註冊之前檢查用戶的年齡。不過,我不需要甚至不想將他們的出生日期存儲爲個人資料信息。我怎樣才能將其添加到註冊表單中,並將其年齡作爲註冊過程的一部分進行驗證?如何將年齡驗證添加到django註冊表單中?
4
A
回答
5
擴展內置註冊表單以添加DOB字段和clean_方法來驗證它是在某個時間之前。喜歡的東西:
from datetime import datetime
from registration.forms import RegistrationForm
class DOBRegistrationForm(RegistrationForm):
date_of_birth = forms.DateField()
def clean_date_of_birth(self):
dob = self.cleaned_data['date_of_birth']
age = (datetime.now() - dob).days/365
if age < 18:
raise forms.ValidationError('Must be at least 18 years old to register')
return dob
在你的意見,你使用DOBRegistrationForm
就像你會正常RegistrationForm
。如果您使用的是registration.views.register
,則只需將該類作爲form_class
參數傳遞即可。
這樣,如果他們的DOB不在數據庫中創建任何行的允許範圍內,他們將得到一個表單錯誤。
8
rz的回答存在一個小缺陷,因爲它沒有考慮到閏年。
如果某人出生於1994年1月1日,在RZ的回答中提到的生日檢查將計算它們爲12月18日28日,2011年
這裏有一個替代版本,需要閏年考慮:
from datetime import date
from registration.forms import RegistrationForm
class DOBRegistrationForm(RegistrationForm):
date_of_birth = forms.DateField()
def clean_date_of_birth(self):
dob = self.cleaned_data['date_of_birth']
today = date.today()
if (dob.year + 18, dob.month, bod.day) > (today.year, today.month, today.day):
raise forms.ValidationError('Must be at least 18 years old to register')
return dob
+0
謝謝,請注意你有bod.day而不是dob.day。編輯的更改太小 – sidarcy 2014-02-27 10:12:44
相關問題
- 1. jQuery表單驗證驗證年齡
- 2. laravel將表單數據添加到身份驗證註冊
- 3. 將Cookie添加到年齡驗證彈出框
- 4. 年齡驗證表格
- 5. FOSUserBundle - 覆蓋表單:如何實際添加註冊驗證組?
- 6. PHP年齡驗證
- 7. Javascript - 年齡驗證
- 8. 年齡驗證Javascript
- 9. Facebook,如何驗證註冊表單?
- 10. android註冊表單驗證
- 11. PHP註冊表單驗證
- 12. joomla註冊表單驗證
- 13. 如何添加額外的字段到Django註冊表單?
- 14. 如何將私有註冊表證書添加到Docker機器
- 15. django註冊:如何驗證用戶?
- 16. 如何通過年齡驗證與DOM
- 17. 如何使用Angularjs驗證年齡?
- 18. 簡單的年齡驗證在javascript
- 19. 添加到數組列表(按年齡)
- 20. 如何驗證註冊表單驗證碼?
- 21. 在wordpress中註冊表單驗證
- 22. Javascript的年齡驗證
- 23. Android年齡驗證活動
- 24. 驗證年齡字段
- 25. HTML/CSS年齡驗證
- 26. jQuery Cookie年齡驗證?
- 27. 準確驗證年齡
- 28. 如何將註冊表單添加到自定義Opencart頁面
- 29. 將驗證碼添加到表單
- 30. PHP年齡驗證下拉列表
完美!只有這個例子的問題是,你不能從日期時間中減去一個日期,但是這讓我得到了我需要的地方。謝謝。 – 2010-12-14 05:49:58
Trey給出的解決方案更準確。 – GetItDone 2013-06-25 12:54:28