2013-07-19 13 views
26

モデルに裏打ちされていないフォームをテンプレートに含めることはできますか?私はデータを格納する必要はありませんが、ビュー内で私自身のPOST要求を生成するためにそのデータが必要です。モデルなしのDjangoフォームを持つことができます

テンプレート - テキストフィールドを含むフォーム。 ビュー - フォームからデータを取得し、別のリクエストを生成します。

フロー - >フォームが

def form_handle(request): 
    if request.method=='POST' 
    form = request.POST 

    #blah blah encode parameters for a url blah blah 
    #and make another post request 

」ビューを呼び出しますが、これはフォーム変数にのみCSRFトークンを置くURLにかかる提出 私はそれらのテキストフィールドにアクセスすることができますいくつかの方法があります。私form_handleビューでテンプレート?

私はモデルでそれを行う方法を知っているが、これを理解できませんでした!

答えて

37

はい。これは非常に可能である。あなたがForm objects上に読むことができます。これは次のようになりあなたと同じようにuldはModelFormを処理しますが、モデルによってバインドされていないことを除き、すべてのフォーム属性を明示的に宣言する必要があります。テンプレートで

class MyForm(forms.Form): #Note that it is not inheriting from forms.ModelForm 
    a = forms.CharField(max_length=20) 
    #All my attributes here 

def form_handle(request): 
    form = MyForm() 
    if request.method=='POST': 
     form = MyForm(request.POST) 
     if form.is_valid(): 
      cd = form.cleaned_data 
      #now in the object cd, you have the form as a dictionary. 
      a = cd.get('a') 

    #blah blah encode parameters for a url blah blah 
    #and make another post request 
    #edit : added ": " after if request.method=='POST' 

:素晴らしい

<form action="{% url form_handle %}" method="POST">{% csrf_token %} 
    {{form.as_p}} 
    <button type="submit">Submit</button> 
</form> 
+2

は、完全にforms.Formの事を見落とし。これはうまくいくはずです!ありがとう!!! – AdRoiT

関連する問題