我正在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请求,可能会有任何作用。
答案 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。我不确定这是不是你想要的。如果是,只需添加评论,我就可以进一步解释这一点。