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

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

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

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

Python

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

Q&A

解決済

1回答

487閲覧

フォームに回答したデータが送信されない

urabele

総合スコア15

Django

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

Python

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

0グッド

0クリップ

投稿2021/11/10 07:43

編集2021/11/10 08:49

前提・実現したいこと

add.htmlに入力した内容をデータベースに追加後、リダイレクトでindex.htmlを表示したい

発生している問題・エラーメッセージ

送信ボタンを押してもデータが送信されない。 解答欄の内容が消えて同じページが表示される データベースを見てみても記録されてません。

下記送信前
イメージ説明
下記送信後
イメージ説明

該当のソースコード

views

1 2from django.shortcuts import render, redirect 3from .models import post 4from .forms import PostCreateForm 5 6def index(request): 7 context = { 8 'posts':post.objects.all() 9 } 10 return render(request, 'zerowaste/index.html', context) 11 12def add(request): 13 form = PostCreateForm(request.POST or None) 14 15 if request.method == 'POST' and form.is_valid(): 16 form.save() 17 return redirect('zerowaste:index') 18 19 context = { 20 'form':PostCreateForm() 21 } 22 return render(request, 'zerowaste/add.html', context)

forms

1from django import forms 2from .models import post 3 4class PostCreateForm(forms.ModelForm): 5 6 class Meta: 7 model = post 8 fields = '__all__'

models

1from django.db import models 2 3# Create your models here. 4 5class post(models.Model): 6 post_title = models.CharField(max_length=200, verbose_name='商品名') 7 post_image = models.ImageField(upload_to='media/', verbose_name='写真') 8 post_price = models.PositiveIntegerField(verbose_name='値段') 9 post_address = models.CharField(max_length=200,verbose_name='住所') 10 post_date = models.DateTimeField('投稿日時', auto_now_add=True) 11 12 def __str__(self): 13 return self.post_title

addhtml

1{% extends 'zerowaste/index.html' %} 2 3{% block contents %} 4<form action="" method="POST"> 5{{ form.as_p}} 6<button type="submit">送信</button> 7{% csrf_token %} 8</form> 9{% endblock %}

urlpy

1from django.urls import path 2from django.conf import settings 3from django.conf.urls.static import static 4from . import views 5 6app_name = 'zerowaste' 7 8urlpatterns = [ 9 path('', views.index, name='index'), 10 path('add/', views.add, name='add'), 11]

試したこと

views.pyの

context = { 'form':PostCreateForm() } return render(request, 'zerowaste/add.html', context)

が機能してると思うので

form = PostCreateForm(request.POST or None) if request.method == 'POST' and form.is_valid(): form.save() return redirect('zerowaste:index')

上記に問題があると思うのですが、どこを間違えてるのか分かりません。

初学者でありますので必要な情報あれば教えてください。
何卒、よろしくお願いします。

追記:画像ファイルを載せないようにするとうまく行きましたが画像ファイルも保存したいので引き続き有識者の方コメント頂けると幸いです。

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

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

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

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

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

guest

回答1

0

自己解決

context = {
'form':form
}
'form':formにし忘れており、上記にしたところ画像のみ問題があると言われたので調べてみると下記のサイトを見つけ
https://freeheroblog.com/upload-img/

記事を参考に下記を修正するとうまく実行できました。

html

1<form action="" method="POST" enctype="multipart/form-data">

enctype="multipart/form-data"の追加

python

1form = PostCreateForm(request.POST, request.FILES or None)

request.FILESの追加

投稿2021/11/10 08:58

urabele

総合スコア15

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問