我有一个表单,我想在最初显示它之前对其进行验证。基本上我想要的行为是当用户打开表单时,初始值(从对象实例中提取)已经被检查,如果无效,则标记为附加错误。
想法是有两种形式:
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
第一个用于编辑草稿,第二个用于检查是否填写了发布所需的所有字段等。
我认为在“编辑项目” View 中这样的东西会起作用并使初始表单显示错误:
# 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() 也不会触发错误。有什么想法吗?
请您参考如下方法:
您需要绑定(bind)表格。代替请求对象,您可以只使用一个空字典。
if request.session.get('trying_to_publish', False):
form = FinalForm({}, instance=project)
form.is_valid()
is_valid()文档有助于对此进行一些解释(如果您知道自己在寻找什么)。必须先绑定(bind)表单,然后才能对其进行验证。即使传递空字典的表单也会变成 bound .
