djangoフレームワークのフォームフィールドから値を取得するにはどうすればよいですか?


104

djangoフレームワークのフォームフィールドから値を取得するにはどうすればよいですか?テンプレートではなくビューでこれを実行したい...

回答:


129

ビューでフォームを使用すると、ほとんどの場合それを説明します。

ビューでフォームを処理するための標準パターンは次のようになります。

def contact(request):
    if request.method == 'POST': # If the form has been submitted...
        form = ContactForm(request.POST) # A form bound to the POST data
        if form.is_valid(): # All validation rules pass
            # Process the data in form.cleaned_data
            # ...

            print form.cleaned_data['my_form_field_name']

            return HttpResponseRedirect('/thanks/') # Redirect after POST
    else:
        form = ContactForm() # An unbound form

    return render_to_response('contact.html', {
        'form': form,
    })

そのバインドされたフォームの例:class ContactForm(forms.Form): my_form_field_name = forms.CharField()
ボブスタイン

フィールドが実際にform.dataまたはform.cleaned_dataにあるときに、テンプレートが{{form.name_of_field}}を実行できるのはなぜですか?
user3245268

56

好きなのを選びな:

def my_view(request):

    if request.method == 'POST':
        print request.POST.get('my_field')

        form = MyForm(request.POST)

        print form['my_field'].value()
        print form.data['my_field']

        if form.is_valid():

            print form.cleaned_data['my_field']
            print form.instance.my_field

            form.save()
            print form.instance.id  # now this one can access id/pk

注:フィールドは、使用可能になるとすぐにアクセスされます。


4
この回答は、すべてのオプションをまとめたものです-生のPOSTデータ、未検証のフォームフィールド、最終的に検証されたフォームフィールドへのアクセス。
Serge Merzliakov 2017年

2
たぶん今日は画面を見すぎたのかもしれませんが、form['my_field'].value()POSTリクエストでフォーム値にアクセスするためのこの非常にシンプルなソリューションを見つけるのに1時間かかりました。ある日:|
イオン化学者、

28

これは、データを検証した後で実行できます。

if myform.is_valid():
  data = myform.cleaned_data
  field = data['field']

また、djangoのドキュメントも読んでください。彼らは完璧です。


13
あなたはあなたのデータをきれいにするb4についてはどうですか?
Sevenearths 2014年

2
データをすべて消去する前は、フォームインスタンスと共に保存されるrequest.POSTのみです。クリーニングは、POSTデータをフォームフィールドに関連付けるものです。クリーニングする前に、request.POSTで作業する必要があります。
14

初期値が設定されている場合、formFieldの値を取得することは可能ですか?
Fydo 2014年

8

投稿リクエストを送信するフォームからデータを取得するには、次のようにします

def login_view(request):
    if(request.POST):
        login_data = request.POST.dict()
        username = login_data.get("username")
        password = login_data.get("password")
        user_type = login_data.get("user_type")
        print(user_type, username, password)
        return HttpResponse("This is a post request")
    else:
        return render(request, "base.html")

7

私はdjango 1.7+とpython 2.7+を使用していますが、上記の解決策は機能しません。そして、フォームの入力値は、以下のようにPOSTを使用して取得できます(上記と同じフォームを使用)。

if form.is_valid():
  data = request.POST.get('my_form_field_name')
  print data

お役に立てれば。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.