Django表单中的额外字段
我正在用Django创建一个表单。当我提交数据时,这些数据会正常发送。我的问题是,我想在提交的数据中添加一个额外的属性,这个属性不是表单中的任何字段,而是一个额外的变量。
这样我就可以在后面做一些类似于(伪代码)的操作:
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 个回答
1
在你表单的 clean
方法里,你可以往清理后的数据中添加一些新的信息,比如说:form.cleaned_data['extra'] = 'monkey butter!'
。这样一来,如果 form.is_valid()
返回真,就说明你得到了额外的信息。
最后你怎么处理这些额外的信息,取决于这些信息是什么,以及你在哪里能获取到它们。
1
有几种方法可以做到这一点。第一种方法是直接把它加到你的模板里。
<form action="." method="post">{% csrf_token %}
{{ form.as_p }}
<input type="hidden" name="extra_field" value="{{ extra }}" />
<input type="submit" value="submit" />
</form>
另一种方法是把这个字段加到你的表单类里,但要使用一个隐藏控件。我不太确定这是不是你想要的。如果是的话,给我留言,我可以进一步解释这个点。
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)