1

カスタムクリーンメソッドを使用してカスタムフォームセットを作成しました。次のようになります。

class MyFormsetBase(forms.models.BaseModelFormSet):
    def __init__(self, *args, **kwargs):
        ....
        super(AdvOrderBidFormsetBase, self).__init__(*args, **kwargs)


    def clean(self):
        ....
        if error:
            raise forms.ValidationError('some validation error')

フォームセットからいくつかのフォーム(間違ったパラメーターを使用)を削除して送信ボタンを押すと(フォームにはDELETEフィールド値== Trueがあります)error = True、クリーンメソッドに入るため、ValidationErrorが発生してフォームウィンドウに戻ります。ただし、フォームの DELETE フィールドの値はリセットされません。次にフォームを送信すると、同じ ValidationError が返されます。それで、どうにかして私のカスタム clean メソッドの DELETE フィールドの値を変更できますか?

4

2 に答える 2

1

この質問はかなり古いものですが、最近同じ問題に遭遇しました。form.data ディクショナリを微調整することで、DELETE フィールドをリセットできました。きれいな解決策ではありませんが、うまくいきます:

class MyFormset(BaseModelFormSet):
    def clean(self):
        for form in self.deleted_forms:
            #iterating over only the forms marked for being delete
            if <YOUR_CONDITION>:
                form.data = form.data.copy() # form.data is immutable unless we copy it
                form.data.pop('{prefix}-DELETE'.format(form.prefix)) # Delete the correct 'DELETE' field from the POST data
                form.cleaned_data.pop('DELETE') # Also remove the field from cleaned data as the formset checks this field for deletion
于 2016-10-12T14:29:30.727 に答える
0

クリーンメソッドで正確に何を返しますか?

「DELETE フィールド値」属性 (またはこのフレーズで意味するもの) がクリーニングされたデータにまだ含まれている場合、それは持続します。

削除するには、クリーンアップされたデータから削除します。

同様の問題がここで報告されています。おそらくこれは、フォーム検証エラーで Django フォーム フィールドをクリアするのに役立ちますか?

于 2012-04-13T10:43:54.447 に答える