私は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を使用します。それ以外の場合は、レンダリング(最初の呼び出し)を使用します。
この情報は正しいですか?