0

後でユーザー提供の変数を使用するための良い方法を見つけようとしています。私はそれをこの最小限の例に分解しました:

models.py

class Input(models.Model):
    x = models.IntegerField()

class InputForm(ModelForm):
    class Meta:
        model = Input

views.py

def input(request):
    if request.method == 'POST':
        form = InputForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/results')
    else:
        form = InputForm()

    return render_to_response('input.html', 
        {'form':form}, context_instance=RequestContext(request))

def result(request):
    # Here I would like to get the input from the form, e.g.
    #
    # x = request.GET["x"]
    #
    # or
    #
    # inp = InputForm(request.GET)
    # x = inp.x
    #
    # Something like this, so that I can be able to write the line below:
    return HttpResponse("x = %f" % x)

これを行うための推奨される方法は何ですか?

編集:

主な問題は、結果関数でrequest.GETdictが空になっていることです。

def results(request):
    return HttpResponse(request.GET)

空のページのみを表示します。そしてもちろん、request.GET ['x']は、例外「Key'x' not found in QueryDict:{}」を提供します。私のinput.htmlは次のようになります:

<form method="post" action="">{% csrf_token %}
    {{ form }}
    <input type="submit" value="Compute" />
</form>

理想的には、FallenAngelの元の回答のように、request.GETをInputFormに返送できるようにしたいのですが、request.GETが空であるため、機能しません。

4

2 に答える 2

0

セッションを使用して、あるビューから次のビューまで値を保持できます。セッションには、データの保存方法に関する多くのバックエンドがあるため、アーキテクチャに最適なものを選択してください。

于 2013-02-19T15:51:57.647 に答える
0

誤解していなければ、投稿されたフォームのフィールドの値を保存せずに使用したいと考えています。を使用できるためcommit=False、メタ モデルを使用してオブジェクトを作成するだけで、データベースには保存しません。

def result(request):
    inp = InputForm(request.GET)
    if inp.is_valid():
        my_obj = inp.save(commit=False) # do not save it to database
        return HttpResponse("x = %f" % my_obj.x)

更新: (何らかの理由で) フォームの検証が必要ない場合は、request.POSTrequest.GETが辞書のようなオブジェクトであるため、辞書メソッドを使用できます。( Django で GET および POST オブジェクトをリクエストします)。そう:

request.GET['x']

また

request.GET.get('x') 

あなたのために働くでしょう。

于 2013-02-19T16:16:11.777 に答える