2011-12-03 113 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

這是一種不同的方法,但看起來非常有用。謝謝 ! –

相關問題