0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Djangoスタートアップ その8 (フォーム編)

Last updated at Posted at 2023-02-26

Djangoのフォームの良いところ

  • フォームを0から定義可能
  • フォームの結果をモデルに保存できるModelFormを作ることが可能

forms.pyの配置

blog
   └── forms.py

モデルのためのフォームを作成

appName/forms.py
from django import forms
from .models import DB#models.pyで定義したDBを使用
class PostForm(forms.ModelForm):
    class Meta:#どのモデルを使えばよいかを伝える
        model = DB
        fields = ('yourField',)#()内部は','で終わる必要がある

フォームのための新しいviewを作成

appName/templates/appname/base.html
<html>
    <head>
        <title>Django Girls blog</title>
        <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
        <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
        <link href='//fonts.googleapis.com/css?family=Lobster&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
        <link rel="stylesheet" href="{% static 'css/blog.css' %}">
    </head>
    <body>
        <div class="page-header">
            <a href="{% url 'post_new' %}" class="top-menu"><span class="glyphicon glyphicon-plus"></span></a>★urlにpost_newを追加
            <h1><a href="/">Django Girls Blog</a></h1>
        </div>
        <div class="content container">
            <div class="row">
                <div class="col-md-8">
                    {% block content %}
                    {% endblock %}
                </div>
            </div>
        </div>
    </body>
</html>

post_newビューをviews.pyに記述

POSTフォームを新規作成するには

  1. PostForm()を呼び出す
  2. テンプレート渡す

ビューで扱う二つのシチュエーション

  1. 最初のページアクセスで空白のフォームが必要な場合
  2. formタグからPOSTされて、リクエストが送信されたとき
appName/views.py
from .forms import PostForm
(中略)
def post_new(request):
    form = PostForm()
    return render(request, 'blog/post_edit.html', {'form': form})

1,2のシチュエーションに応じて場合分けを行ったviews.pyファイルの内容

appName/views.py
import django.shortcuts import render, redirect
    if request.method == "POST":
        form = PostForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
#以降は実装によりけり
#            post.author = request.user
#            post.published_date = timezone.now()
            post.save()#★DBにセーブする
#            return redirect('post_detail', pk=post.pk)
    else:
        form = PostForm()
    return render(request, 'blog/post_edit.html', {'form': form})

参考記事
https://tutorial.djangogirls.org/ja/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?