我认为这看起来微不足道,并且感到很惊讶。
我有一个Django模型+表单(ModelForm)。
我的用户填写表格,在我的观点中,我有通常的说法:
if request.POST:
form = myForm(request.POST)
if request.method == "POST" and form.is_valid():
result = form.save(commit=False)
现在我需要重点操作表单的某些字段(在“结果”对象中),我想在保存之前再次检查表单is_valid()
。
我尝试使用“result”对象(即ModelForm对象)使用字典创建新表单(建议here)
result_dictionary = dict((x.name, getattr(result, x.name)) for x in result._meta.fields)
或
result_dictionary = model_to_dict(result, fields=[field.name for field in result._meta.fields])
加
testForm = myForm(initial=result_dictionary)
但它没有通过is_valid()并且没有给出任何错误! 字段传递给新表单...
有什么想法吗?
答案 0 :(得分:1)
有时,查看Django源代码可能非常有用,这里是BaseForm.is_valid()
:
def is_valid(self):
"""
Returns True if the form has no errors. Otherwise, False. If errors are
being ignored, returns False.
"""
return self.is_bound and not bool(self.errors)
因此,如果没有错误,is_valid()
返回false,因为您没有绑定表单,您没有在任何地方提供表单来查找数据。请尝试使用form.data
字典,例如:
if request.POST:
form = myModel(request.POST)
if request.method == "POST" and form.is_valid():
form.data['field1'] = 'Changing this'
form.data['field2'] = 34
testform = myModel(data=form.data)