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。那么,我可以在我的自定义清理方法中以某种方式更改 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

你在你的 clean 方法中究竟返回了什么?

如果“DELETE 字段值”属性(或您使用此短语表示的任何内容)仍包含在已清理的数据中,它将持续存在。

要删除它,请将其从已清理的数据中删除。

这里报告了类似的问题,也许这有助于在表单验证错误中清除 Django 表单字段?

于 2012-04-13T10:43:54.447 回答