質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1558閲覧

【Django】フォームから送信してDBに情報を上書きしてそれを表示したい

akaiman

総合スコア8

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/05/24 08:11

Django初学者です。
現在、「pythonで作るWEBアプリケーション開発入門その2」という書籍で勉強しています。
そこでformを使ってDbを更新し、一覧を取得して表示するという簡単なプログラムを書籍に沿って記述していたのですが
どうしてもわからず質問させていただきます。

解決したいこと

■フォームで送信した内容をDBに格納してそれを一覧に表示したい。(←これを実現したいです。)

エラーはターミナルにも出ていなくpython manage.py runserverを実行して問題なく起動できます。
ですがブラウザからlocalhost:8000/formから内容を記述し送信ボタンを押してもでフォームの画面に戻ってしまいます。(DBに格納されません。)

リダイレクトされているのかなと思いリダイレクト先をすべて(to="/")に変更しましたが
リダイレクトされていませんでした。
そもそもプログラム自体が動いていないような気もします。
いろいろ調べて試しましたがお手上げ状態でして・・・

他に必要な情報等ありましたらお申し付けください。
お力添え宜しくお願いいたします。

以下、現在記述しているコード

views.py

1from django.shortcuts import render, redirect 2from .models import Feed 3from .forms import FeedForm 4 5def index(request): 6 feeds = Feed.objects.all() 7 return render(request, 'index.html', {'feeds': feeds}) 8 9def form(request): 10 form = FeedForm() 11 return render(request, 'form.html', {'form': form}) 12 13def post(request): 14 if request.method != 'POST': 15 return redirect(to="/form") 16 form = FeedForm(request.POST) 17 if form.is_valid(): 18 feed = Feed.objects.create(title=request.POST['title'], description=request.POST['description'], href=request.POST['href']) 19 feed.save() 20 return redirect(to="/") 21 else: 22 return redirect(to="/form") 23

models.py

1from django.db import models 2 3class Page(models.Model): 4 id = models.AutoField(primary_key=True) 5 title = models.CharField(max_length=256) 6 description = models.CharField(max_length=1024) 7 href = models.URLField(max_length=2018) 8 date_published = models.DateField() 9 10class Feed(models.Model): 11 id = models.AutoField(primary_key=True) 12 title = models.CharField(max_length=256) 13 description = models.CharField(max_length=1024) 14 href = models.URLField(max_length=2084) 15 rss = models.URLField(max_length=2084) 16

forms.py

1from django.forms import Form, CharField, URLField 2 3class FeedForm(Form): 4 title = CharField(max_length=256) 5 description = CharField(max_length=1024) 6 href = URLField(max_length=2084) 7

index.html

1<!DOCTYPE html> 2<html> 3 <head> 4 <meta charset="utf-8"/> 5 </head> 6 <body> 7 <table class="table"> 8 <thead> 9 <tr> 10 <th scope="col"></th> 11 <th scorp="col">タイトル</th> 12 <th scope="col">説明</th> 13 <th scope="col">フィードのURL</th> 14 </tr> 15 </thead> 16 <tbody> 17 {% for feed in feeds %} 18 <tr> 19 <th scope="row">{{ forloop.counter }}</th> 20 <td>{{ feed.title }}</td> 21 <td>{{ feed.description }}</td> 22 <td>{{ feed.href }}</td> 23 </tr> 24 {% endfor %} 25 </tbody> 26 </table> 27 </body> 28</html> 29

form.html

1<form acction="/post" method="POST"> 2 {% csrf_token %} 3 {{ form }} 4 <button type="submit">送信</button> 5</form> 6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Feedモデルのrssモデルフィールドが必須であり、下記コードで、rssを指定してインスタンス化していないため、エラーが発生していませんか?

python

1feed = Feed.objects.create(title=request.POST['title'], description=request.POST['description'], href=request.POST['href'])

FeedFormにrssフォームフィールドを追加する、またはFeedモデルのrssモデルフィールドにblank=True, null=Trueを指定したらいかがでしょうか。

投稿2020/05/24 23:25

hasami

総合スコア1277

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問