2

最初に表示する前に検証したいフォームがあります。基本的に、私が目指している動作は、ユーザーがフォームを開いたときに、初期値(オブジェクトインスタンスから取得)がすでにチェックされており、無効な場合は、エラーが添付されたものとしてマークされます。

アイデアは2つの形式を持つことです:

def DraftForm(forms.ModelForm):
    class Meta:
        model = Project

def FinalForm(DraftForm):
    def __init__(self, *args, **kwargs):
        super(FinalForm, self).__init__(*args, **kwargs)
        self.fields['text'].required = True

1つ目は下書きを編集するときに使用され、2つ目は公開に必要なすべてのフィールドが入力されているかどうかを確認するために使用されます。

「プロジェクトの編集」ビューでこのようなものが機能し、最初のフォームがエラーで表示されると思いました。

# redirected from some other form, so no POST at this point:
if request.session.get('trying_to_publish', False):
    form = FinalForm(instance=project)
    form.is_valid()
else:
    form = DraftForm(instance=project)
...

しかし、違います。full_clean()もエラーをトリガーしません。何か案は?

4

1 に答える 1

3

フォームをバインドする必要があります。request オブジェクトの代わりに、空の辞書を使用できます。

if request.session.get('trying_to_publish', False):
    form = FinalForm({}, instance=project)  
    form.is_valid()

is_valid()ドキュメントは、これを少し説明するのに役立ちます (探しているものがわかっている場合)。フォームは、検証する前にバインドする必要があります。空の辞書を渡されたフォームもバインドされます。

于 2012-07-03T15:42:36.983 に答える