Django表单中的额外字段

4 投票
3 回答
1407 浏览
提问于 2025-04-17 07:35

我正在用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)

撰写回答