電子工作作業報告書管理アプリその27
viewの解説から
views.pyを開きformの行の後に
form .forms import DataForm
その後に、ビューを追加する
DataFormを新しく作るには、DataForm()を呼び出して、
それをテンプレートに渡す必要がある。
form .forms import DataForm def data_new(request): form = DataForm() return render(request, 'data1.html', {'form':form})
フォームの保存をするには
2つのシチュエーションがある
1つ目は、最初にページにアクセスした時で空白のフォームが必要な場合
2つ目は、すべてのフォームデータが入力された状態でビューに戻ってくる場合
なので条件分岐を追加する必要がある
条件分岐にはif文を使う
if request.method == "POST": [.....] else: form = DataForm()
ドット[.....]の部分を埋めていく
methodがPOSTの場合、フォームデータを使ってDataFormを構築する
form = DataForm(request.POST)
次にフォームの値が正しいかどうかチェックする。つまり
すべての必須フィールドが設定され不正な値が送信されない事
これをform.is_valid()で検証する
フォームをチェックして、フォームの値が有効であれば保存が出来る。
if form.is_valid(): post = form.save(commit=False) post.autor = request.user post.published_date= timezone.now() post.save()
まずform.saveでフォームを保存する事と
autorを追加する事(DataForm内にautorフィールドなく、このフィールドは必須)
commit=Falseは保存前にautorを追加したいのでPOSTモデルを"まだ保存しない"という意味
ほとんどの場合、commit=False無しでform.save()を使うが、
今回は指定する必要がある。
post.save()は変更を保存し(作成者を追加しつつ)データが作成される
新しく作成されたページを表示したい時は次をインポートする
form django.shortcuts import redirect
return redirect('post_detail', pk=post.pk)
post_detailは移動したいviewの名前。このviewでは
pk変数が必須になりviewにそれを渡すためにpk=post.pkを使う
以上を踏まえてviewの全体コードを載せる
def post_new(request): if request.method == "POST": form = DataForm(request.POST) if form.is_valid(): post = form.save(commit=False) post.author = request.user post.published_date = timezone.now() post.save() return redirect('post_detail', pk=post.pk) else: form = DataForm() return render(request, 'blog/post_edit.html', {'form': form})
次回はCSSの解説するか