【问题标题】:Passing Django form class as function parameter将 Django 表单类作为函数参数传递
【发布时间】:2012-08-15 06:55:21
【问题描述】:

我想通过将“ModelForm”类(不是实例)作为参数传递来重用下面的“编辑”视图。简化代码如下:

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_NameOnlyPersonForm_BirthdayOnly),一切正常。

有谁知道我做错了什么?

编辑: 我得到的错误是表单验证错误: “这是必填栏。”

这是因为我的“Person”模型中有一个字段是必需的,并且由于某种原因在我这样做时没有设置它: "form = form_class(request.POST, instance=person)"

当我在模板中显示表单时,这会导致 form.is_valid() 失败并出现上述错误。

【问题讨论】:

  • 你能举个错误的例子吗?
  • @ted:这是正确的。 show_person 是一个视图。
  • @DanielRoseman:我得到的错误是表单验证错误:* 此字段是必需的。

标签: python django django-forms


【解决方案1】:

您的edit_person.html 模板中有什么内容? POST 目标 URL 是否硬编码,并设置为错误的视图?

例如是您的PersonForm_NameOnly 表单被错误地提交给edit_person_birthday,还是您的PersonForm_BirthdayOnly 表单被错误地提交给edit_person_name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 2018-01-04
    • 1970-01-01
    相关资源
    最近更新 更多