1
在Django表單中,我讓用戶輸入他們的用戶名。本場是像這樣:操縱Django表單以顯示正確的驗證錯誤
username = forms.RegexField(max_length=50,regex=re.compile('^[\[email protected]+-]+$'),\
error_messages={'invalid': _("(tip: only use alphabets, numbers or @ _ . + - symbols)")})
後來,在clean_username
方法,我還需要確保用戶不包括在用戶名一whtiespace。我這樣做,像這樣:
def clean_username(self):
username = self.cleaned_data['username']
if ' ' in username:
raise ValidationError("(tip: a username can't have whitespaces)")
return username
的問題是,這個驗證錯誤從不出現,因爲空格失敗之前的正則表達式檢查。我需要能夠單獨顯示與空白相關的ValidationError。此外,如果用戶編寫正則表達式失敗的用戶名(例如Bèndèr*
),我也不希望在顯示相關錯誤時妥協。
解決此問題的最佳方法是什麼?一個說明性的例子會很棒。謝謝!
感謝阿里。是的,我懷疑是這樣。但需要澄清一點:通過用'CharField'替換'RegexField',我會失去其他任何東西嗎?如同爲什麼存在'RegexField'事件,因爲regexvalidation可以很容易地在CharField中調用?我試圖在這裏格外小心,因爲這涉及到我的應用程序的認證流程 - 不想被任何無法預料的事情所困擾。然而,'RegexField'的官方文檔看起來非常溫和。 –
您可以查看'RegexField'的來源:https://github.com/django/django/blob/master/django/forms/fields.py#L493 沒有比傳遞正則表達式更多的東西了,在字段中定義給驗證器。 – arie