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

第一个用于编辑草稿,第二个用于检查是否填写了发布所需的所有字段等。

我认为在“编辑项目”视图中这样的事情会起作用,并使初始表单显示错误:

# 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

您需要绑定表单。代替请求对象,您可以只使用一个空字典。

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

is_valid ()文档有助于解释这一点(如果你知道你在找什么)。必须先绑定表单,然后才能对其进行验证。即使是传递一个空字典的表单也会被绑定

于 2012-07-03T15:42:36.983 回答