2017-06-04 50 views
0

私はDjangoを初めて使い、7つのパートのチュートリアルをウェブサイトで完成しました。 Part fourのチュートリアルでは(何も表示されていないビュー)に投稿し、成功した場合はresultsを返すか、そうでない場合はdetailsに戻るというフォームのページdetailsが導入されています。Django:同じページのPOSTでフォームを扱う正しい方法

しかし、自分自身にPOSTしたいページがある場合(たとえば、サーバー側で計算されたページに関連する値の更新など)はどうでしょうか?

注:これはうまくいきましたが、私が正しいことをしているかどうかを知りたいのですが、私はいくつかのことについて混乱しています。ビューが最初にそれが存在する場合、私は、オブジェクトをつかむと呼ばれているこの場合はそう

def post_to_self_page(request, object_id): 

    obj = get_object_or_404(Obj, pk=object_id) 

    # if update sent, change the model and save it 
    model_updated = False 
    if 'attribute_of_obj' in request.POST.keys(): 
     obj.attribute_of_obj = request.POST['attribute_of_obj'] 
     obj.save() 
     model_updated = True 

    # do some stuff with obj 

    # specify the context 
    context = { 
    'obj': obj, 
    } 
    if model_updated: 
     # good web practice when posting to use redirect 
     return HttpResponseRedirect(reverse('my_app:post_to_self_page', args=(object_id,))) 
    return render(request, 'my_app/post_to_self_page.html', context) 

は、だから私のページのコードは、現在のようになります。次に、POSTに属性が含まれているかどうかを確認します。その場合、モデルを更新します。その後、モデルが更新された場合は、同じページにHttpResponseRedirectを使用します。それ以外の場合は、レンダリング(最初の呼び出し)を使用します。

この情報は正しいですか?

答えて

1

あなたはこのような何かを行うことができ、

def post_to_self_page(request, object_id): 
    obj = get_object_or_404(Obj, pk=object_id) 
    if request.method == 'POST': 
     obj.attribute_of_obj = request.POST['attribute_of_obj'] 
     obj.save() 
    context = { 'obj': obj, } 
    return render(request, 'my_app/post_to_self_page.html', context) 
関連する問題