LoginSignup
0
0

More than 5 years have passed since last update.

Django2.0でブログの作成(その6:記事の作成)

Posted at

その6

記事の作成をトップページからできるようにしましょう。
入力フォームから何かを作る場合は、forms.pyを使用します。(commentでもやりましたね。ほとんど同じですよ!)

models.py

既存のPostモデルを使用するので、今回ここの変更はありません。

forms.py

新しく記事入力のフォームを作って、PostModelと繋げるため以下のように記述を追加します。

blog/forms.py
class PostForm(forms.ModelForm):
    class Meta:
        model = models.Post
        fields = ('title', 'text',)

views.py

blog/views.py
def create_article(request):
    form = forms.PostForm()
    if request.method == "POST":
        form = forms.PostForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.author = request.user
            post.save()
        return redirect('blog:article', pk=post.id)

    return render(request, 'blog/create_article.html', {
        'form': form
    })

urls.py

blog/urls.py
path('article/create/', views.create_article, name='create_article'),

追加します。

create_article.html

新しく、記事の作成用のhtmlを作ります。

create_article.html
<html>
  <head>
    <!-- bootstrap -->
    <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">
  </head>

  <body>
      <div>
        <a href="{% url 'blog:post_list' %}" class="btn btn-primary">HOMEへ戻る</a>
        <hr>
          <h1>記事の作成</h1><br>

          <form method="post" action="">
            {% csrf_token %}
            {{ form.as_p }}
            <input type="submit">
          </form>
      </div>
  </body>
</html>

post_list.html

トップページ(post_list.html)に記事の作成ボタンを追加します。

post_list.html
<a href="{% url 'blog:create_article' %}">記事の作成</a>

確認

Post.author" must be a "User" instance.
と言われてインスタンスがないなどと言われる場合があります。
これはユーザーがログアウトされた状態で記事を書き込もうとしているので、エラーになっているだけです。
localhost:8000/adminから一度ログインしてためしてみてください。
(この問題の永久的解決法はまたのちほど…)

スクリーンショット 2018-10-09 15.33.48.png

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