2011-12-03 65 views
4

我正在Django中创建表单。当我发布数据时,数据自然会发送。我的问题是,我想传递一个额外的属性到POST数据,这不是任何表单域,而是一个额外的属性。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请求的工作。

回答

4

如果你想传递什么Django的从HTML POST请求,你如果要修改在Python中的POST字典,从您的视图中使用一个隐藏的输入

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

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

copy()它让它变得可变。

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

form = MyForm(mutable_post) 
+0

是的,就是这样。谢谢 ! –

+0

@VascoPatricio没问题,但你一般都想接受实际回答你的问题的答案,而不是那些似乎有用但是不同的方法。 –

+0

是啊,我是新来的网站...我不知道你只能接受一个答案。现在明白了。固定。 –

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。我不确定这是不是你想要的。如果是,请添加评论,我可以进一步解释这一点。

+0

是的,它修复了它。谢谢 ! –

2

在您的表单的clean方法中,您可以将新信息添加到cleared_data中,如:form.cleaned_data['extra'] = 'monkey butter!',然后如果是form.is_valid(),那么您有其他信息。

你最终做什么取决于你的额外信息是什么,以及它可以提供给你的地方。

+0

这是一种不同的方法,但看起来非常有用。谢谢 ! –

相关问题