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*
のような正規表現に失敗したユーザ名を書いた場合、関連するエラーを表示することで妥協したくありません。
この問題を解決するにはどうすればよいですか?説明的な例が素晴らしいでしょう。ありがとう!
ありがとうアリー。そうです、私はそう思っていました。しかし、一つの明確化が必要でした: 'RegexField'を' CharField'に置き換えることによって何かを失うでしょうか?とにかく、RegexvalidationがCharFieldで簡単に呼び出せれば、なぜRegexFieldというイベントが存在するのですか?私はこれが私のアプリの認証フローに関連しているので、ここでは余計に注意しようとしています。予期しない何かに噛まれたくない。 'RegexField'の公式文書はかなり良性のようです。 –
'RegexField'のソースを確認することができます:https://github.com/django/django/blob/master/django/forms/fields.py#L493 正規表現を渡すよりもそれほど多くはありませんフィールドに定義されているバリデータをバリデータに渡します。 – arie