2

Django 1.4 documentationでは、clean_<fieldname>メソッドが最初に実行され、次にフォームcleanメソッドが実行されると書かれています。

次のコードサンプルがあります。フォームは FormPreview で使用されます。pmidフォームでフィールドが空の場合、ValidationError例外がスローされるはずですが、発生しません。

class MyForm(forms.Form):
    pmid = forms.CharField()
    .. other fields ..

    def clean(self):
        cd = super(MyForm, self).clean()
        cd['pmid'] # returns KeyError and it's not in cd
        return cd

clean_<field>どのメソッドもオーバーライドしません。

4

1 に答える 1

2

まず、フィールドが空白でないことを確認するだけの場合は、フィールドに追加required=Trueするだけです。例えば:

class MyForm(forms.Form):
    pmid = forms.CharField(required=True)
    ...

これで完了です。

ただし、そのように実行できなかったとしても、で検証することはできませcleanんがclean_<fieldname>、ドキュメントで説明されているようにで検証します。

def clean_pmid(self):
    pmid = self.cleaned_data.get('pmid')
    if not pmid:
        raise forms.ValidationError('pmid cannot be blank')
    return pmid
于 2012-07-05T19:41:03.853 に答える