我想通过传递'ModelForm'类(不是实例)作为参数来重用下面的'edit'视图。简化的代码如下:
def edit(request, id, form_class):
person = get_object_or_404(Person, pk=id)
if not request.method == 'POST':
form = form_class(instance=person)
else:
form = form_class(request.POST, instance=person)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse(show_person), args=(id,))
return render_to_response('edit_person.html', {'form' : form, context_instance=RequestContext(request))
def edit_person_name(request, id):
return edit(request, id, PersonForm_NameOnly)
def edit_person_birthday(request, id):
return edit(request, id, PersonForm_BirthdayOnly)
PersonForm_NameOnly
和'PersonForm_BirthdayOnly'是继承自ModelForm
的表单类。
不幸的是,上面没有验证,但是给出了一个错误,即缺少某些必需的表单字段。但是,如果不是使用form_class
变量,而是直接使用类名(PersonForm_NameOnly
或PersonForm_BirthdayOnly
),一切正常。
有谁知道我做错了什么?
编辑: 我得到的错误是表单验证错误: “这是必填栏。”
这是因为我的'Person'模型中有一个字段是必需的,并且由于某种原因它在我执行时没有设置: “form = form_class(request.POST,instance = person)”
当我在模板中显示表单时,这会导致form.is_valid()失败并出现上述错误。
答案 0 :(得分:1)
edit_person.html
模板中包含哪些内容? POST目标URL是否已硬编码,并设置为错误的视图?
E.g。您的PersonForm_NameOnly
表单是错误地提交给edit_person_birthday
,还是您的PersonForm_BirthdayOnly
表单被错误地提交给edit_person_name
?