将Django窗体类作为函数参数传递

2024-05-02 02:53:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我想通过传递一个“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\ubirthdayonly'是继承自ModelForm的表单类。在

不幸的是,上面没有验证,但是给出了一个错误,即缺少一些必需的表单字段。但是,如果我不使用form_class变量,而是直接使用类名(PersonForm_NameOnlyPersonForm_BirthdayOnly),一切正常。在

有人知道我做错了什么吗?在

编辑: 我得到的错误是表单验证错误: “此字段是必需的。”

在我的领域里,我不需要它,因为我有一个我不需要的人,因为我有这样的理由: “form=form_类(请求.POST,实例=人)

这导致表格有效吗()在模板中显示表单时失败,并出现上述错误。在


Tags: instanceformid表单returnrequestdef错误
1条回答
网友
1楼 · 发布于 2024-05-02 02:53:47

你的edit_person.html模板中有什么?POST target URL是否硬编码,并设置为错误的视图?在

例如,您的PersonForm_NameOnly表单是否被错误地提交给edit_person_birthday,或者您的PersonForm_BirthdayOnly表单是否被错误地提交给edit_person_name?在

相关问题 更多 >