django形式的附加字段

时间:2011-12-03 02:09:40

标签: python django forms django-forms

我正在Django中创建一个表单。当我发布数据时,数据会自然发送。我的问题是,我想将一个额外的属性传递给POST数据,这不是任何表单字段,而是另外一个。

这样我以后可以做类似(伪代码)的事情:

def form_view(request):
    if request.method == 'POST':
        form = MyForm(request.POST)
        if form.is_valid():
            extra_field = form.cleaned_data['extra_field']
            #or maybe
            extra_field = form.extra_field
            #...
    else:
        form = MyForm()
        #...

为了将一个额外的属性(不是字段而是简单的变量)传递给POST请求,可能会有任何作用。

3 个答案:

答案 0 :(得分:4)

如果你想通过HTML将任何内容传递给django作为POST请求,你可以使用隐藏的输入

<input type="hidden" name="foo" value="bar" />

print request.POST['foo'] # out: bar

如果你想从你的视图中修改python中的POST词典,copy()使它变得可变。

mutable_post = request.POST.copy()
mutable_post['foo'] = 'bar'

form = MyForm(mutable_post)

答案 1 :(得分:2)

在表单的clean方法中,您可以向cleaning_data添加新信息,例如:form.cleaned_data['extra'] = 'monkey butter!',如果是form.is_valid(),则表示您有额外的信息。

您最终将取决于您的额外信息以及您可以使用的位置。

答案 2 :(得分:1)

有几种方法可以做到这一点。一,是否可以将其添加到模板中。

<form action="." method="post">{% csrf_token %}
   {{ form.as_p }}
   <input type="hidden" name="extra_field" value="{{ extra }}" />
   <input type="submit" value="submit" />
</form>

另一种方法是将字段添加到表单类,但使用hidden widget。我不确定这是不是你想要的。如果是,只需添加评论,我就可以进一步解释这一点。