2

Djangoフォームの作成と検証に問題があります。

#views.py:
def create(request):
    if request.method == 'POST':
        form = CreateDocumentForm(request.POST)
        if form.is_valid():
            doc = Document.objects.create(name=form.cleaned_data['name'])
    #snip


#forms.py:
    class CreateDocumentForm(forms.ModelForm):
    name = forms.CharField()
    def clean_name(self):
        cleaned_name = self.cleaned_data['name']
        rgx = re.compile('^(\w|-|\.)+$')
        if rgx.match(cleaned_name) == None:
            raise ValidationError("invalidchars")
        return cleaned_name

ロジックは正常に機能していますが、どの種類のVaidationErrorが発生したかを判断する方法がわかりません。また-これはAjaxリクエストによって処理されるため、応答でテンプレートを使用しません。このビューで失敗したもののステータスを取得する必要があります。

どうも

4

1 に答える 1

4

通常、ValidationErrors自体は表示されません。form.is_validを呼び出すと、検証中に発生したエラーはすべて収集され、辞書form.errorsとして返されます。

その辞書で、特定のフィールドに関連するエラーを確認できます。エラーのあるフィールドの結果は、そのフィールドに対して発生したValidationErrorsの文字列値になります。

あなたの見解では、form.is_valid()がFalseを返す場合、これを行うことができます:

if 'name' in form.errors:
    for err_message in form.errors['name']:
        # do something with the error string
于 2012-10-20T20:15:46.703 に答える