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

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

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

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

Python

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

Q&A

解決済

1回答

1252閲覧

Django formからDBにデータを送ることができないです。

Mitsu_

総合スコア10

Django

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

Python

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

0グッド

0クリップ

投稿2021/05/09 07:58

編集2021/05/09 09:02

前提・実現したいこと

formから画像や他のデータを送りたいのですが、全く送れません。
画像はmediaファイルへ格納する予定なのですが、こちらも格納されません。
エラーメッセージも出ておらず、google chrome検証ツールでNetworkというところを見ても、エラーにはなっておらず、どこが間違っているのかがわからないので、投稿させていただきました。
ちなみに、ターミナル上でもエラーは出ておりませんでした。
どうぞよろしくお願い申し上げます。

該当のソースコード

exhibit_product.html

<form method="POST" enctype="multipart/form-data" action="{% url 'SellText:exhibit_product' %}"> {% csrf_token %} {% if form.errors %} {% for key, value in form.error.items %} {% if key != '__all__' %} <p>{{key}}: {{value.as_text}}</p> {% endif %} {%endfor%} {% endif %} <div class="mb-3"> <label for="exampleFormControlInput1" class="form-label">商品名</label> <!-- <input type="email" class="form-control" id="exampleFormControlInput1" placeholder="50文字まで">--> {{ form.product_name | add_class:"form-control" }} </div> <div class="mb-3"> <label for="exampleFormControlTextarea1" class="form-label">商品説明</label> <!-- <textarea class="form-control" id="exampleFormControlTextarea1" placeholder="商品の説明: 200文字以内" rows="50"></textarea> --> {{ form.product_description | add_class:"form-control" }} </div> <div class="mb-3"> <label for="exampleFormControlTextarea1" class="form-label">商品の状態</label> {{ form.product_status | add_class:"form-select"}} </div> <div class="input-group mb-3"> <label class="input-group-text" for="inputGroupFile01">商品画像 1枚目</label> <!-- <input type="file" class="form-control" id="inputGroupFile01"> --> {{ form.product_picture1 | add_class:"form-control" }} </div> <div class="input-group mb-3"> <label class="input-group-text" for="inputGroupFile01">商品画像 2枚目</label> <!-- <input type="file" class="form-control" id="inputGroupFile01"> --> {{ form.product_picture2 | add_class:"form-control" }} </div> <div class="input-group mb-3"> <label class="input-group-text" for="inputGroupFile01">商品画像 3枚目</label> <!-- <input type="file" class="form-control" id="inputGroupFile01"> --> {{ form.product_picture3 | add_class:"form-control" }} </div> <div class="mb-3"> <label for="exampleFormControlTextarea1" class="form-label">商品の状態</label> {{ form.product_delivery | add_class:"form-select"}} </div> <div class="mb-3"> <label for="exampleFormControlInput1" class="form-label">授業名</label> <!-- <input type="email" class="form-control" id="exampleFormControlInput1" placeholder="50文字まで"> --> {{ form.lecture_name | add_class:"form-control" }} </div> <div class="mb-3"> <label for="exampleFormControlTextarea1" class="form-label">商品の状態</label> {{ form.faculty | add_class:"form-select"}} </div> <div class="mb-3"> <label for="exampleFormControlTextarea1" class="form-label">商品の状態</label> {{ form.department | add_class:"form-select"}} </div> <div class="mb-3"> <label for="exampleFormControlTextarea1" class="form-label">商品の状態</label> {{ form.grade | add_class:"form-select"}} </div> <div class="input-group mb-3"> <span class="input-group-text">¥</span> <span class="input-group-text">0 ~ 9,999,999</span> <!-- <input type="text" class="form-control" placeholder="価格から手数料 5%差引かれます" aria-label="Dollar amount (with dot and two decimal places)"> --> {{ form.price | add_class:"form-control" }} </div> <input type="submit" class="btn btn-outline-primary" value="出品する"> </form>

views.py

def

1 form = forms.ExhibitProduct() 2 if request.method == 'POST': 3 form = forms.ExhibitProduct(request.POST or None, request.FILES or None) 4 if form.is_valid(): 5 print(form.cleaned_data) 6 form.save() 7 return redirect('SellText:products') 8 return render(request, 'exhibit_product.html', context={ 9 'form':form 10 }) 11

forms.py

class

1 product_name = forms.CharField(label='商品名',widget=forms.TextInput(attrs={'placeholder':'50文字まで'})) 2 product_description = forms.CharField(label='商品説明',widget=forms.TextInput(attrs={'placeholder':'商品の説明: 200文字以内'})) 3 product_status = forms.ChoiceField(label='商品の状態',choices=( 4 ('新品未使用','新品未使用'), 5 ('未使用に近い','未使用に近い'), 6 ('目立った傷や汚れは無し','目立った傷や汚れは無し'), 7 ('書き込みや傷がある','書き込みや傷がある'), 8 ('状態は最悪だが使える','状態は最悪だが使える'), 9 )) 10 product_picture1 = forms.FileField(label='画像: 1枚目') 11 product_picture2 = forms.FileField(label='画像: 2枚目') 12 product_picture3 = forms.FileField(label='画像: 3枚目') 13 product_delivery = forms.ChoiceField(label='発送日',choices=( 14 ('1~2日以内','1~2日以内'), 15 ('3~4日以内', '3~4日以内'), 16 ('5~7日以内', '5~7日以内'), 17 )) 18 lecture_name = forms.CharField(label='授業名') 19 faculty = forms.ChoiceField(label='関係する学部', choices={ 20 ('工学部','工学部'), 21 ('共同教育学部','共同教育学部'), 22 ('地域デザイン科学部', '地域デザイン科学部'), 23 ('農学部','農学部'), 24 ('国際学部','国際学部'), 25 ('大学院','大学院'), 26 ('その他(学部共通、全学年共通 etc..)','その他(学部共通、全学年共通 etc..)'), 27 }) 28 depatment =forms.ChoiceField(label='学科',choices=( 29 ('地域デザイン:コミュニティ','地域デザイン: コミュニティ'), 30 ('地域デザイン:建築都市','地域デザイン: 建築都市'), 31 ('地域デザイン:社会基盤','地域デザイン: 社会基盤'), 32 ('国際学科','国際学科'), 33 ('共同教育: 教育人間科学系','共同教育: 教育人間科学系'), 34 ('共同教育: 人文社会系','共同教育: 人文社会系'), 35 ('共同教育: 自然科学系','共同教育: 自然科学系'), 36 ('共同教育: 芸術・生活・健康系','共同教育: 芸術・生活・健康系'), 37 ('工学: 物質環境化学コース','工学: 物質環境化学コース'), 38 ('工学: 機械システム工学コース','工学: 機械システム工学コース'), 39 ('工学: 情報電子オプティクスコース','工学: 情報電子オプティクスコース'), 40 ('工学: その他','工学: その他'), 41 ('農学: 生物資源科学','農学: 生物資源科学'), 42 ('農学: 応用生命化学','農学: 応用生命化学'), 43 ('農学: 農業環境工学科','農学: 農業環境工学科'), 44 ('農学: 農業経済学科','農学: 農業経済学科'), 45 ('農学: 森林科学科','農学: 森林科学科'), 46 ('大学院: 地域創生科学研究科','大学院: 地域創生科学研究科'), 47 ('大学院: 教育学研究科','大学院: 教育学研究科'), 48 ('大学院: 連合農学研究科','大学院: 連合農学研究科'), 49 )) 50 grade = forms.ChoiceField(label='学年', choices=( 51 ('学部1年','学部1年'), 52 ('学部2年','学部2年'), 53 ('学部3年','学部3年'), 54 ('学部4年','学部4年'), 55 ('大学院1年','大学院1年'), 56 ('大学院2年','大学院2年'), 57 ('その他','その他'), 58 )) 59 price = forms.IntegerField(label='商品価格',widget=forms.TextInput(attrs={'placeholder':'販売価格から5%の手数料が差引かれます'})) 60 class Meta: 61 model = Product 62 fields='__all__'

models.py

class

1 product_name = models.CharField(max_length=50) 2 product_description = models.CharField(max_length=200) 3 product_status = models.CharField(max_length=50) 4 product_delivery = models.IntegerField() 5 price = models.IntegerField() 6 product_picture1 = models.FileField(upload_to='product_picture1/') 7 product_picture2 = models.FileField(upload_to='product_picture2/') 8 product_picture3 = models.FileField(upload_to='product_picture3/') 9 lecture_name = models.CharField(max_length=100) 10 faculty = models.CharField(max_length=50) 11 department = models.CharField(max_length=50) 12 grade = models.CharField(max_length=50) 13 14 15 class Meta: 16 db_table = 'product' 17 def __str__(self): 18 return self.products_name 19

APP側のurl.py

app_name='SellText'

1urlpatterns = [ 2 3 path('products/', products_home, name='products'), 4 path('home/', contact, name='contact'), 5 path('regist_form/', regist_form, name='regist_form'), 6 path('exhibit_product/', exhibit_product, name='exhibit_product'), 7 8]

project側 urls.py

urlpatterns

1 path('admin/', admin.site.urls), 2 path('SellText/', include('SellText.urls')), 3] 4if settings.DEBUG: 5 urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

settings.py

BASE_DIR

1TEMPLATE_DIR = os.path.join(BASE_DIR, 'templates') 2STATIC_ROOT =os.path.join(BASE_DIR,'staticfiles') 3 4MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 5MEDIA_URL = '/media/' 6 7STATIC_URL = '/static/' 8STATICFILES_DIRS = [str(BASE_DIR / 'static')]

下の画像のようにprint関数に1, 2, 3, 4と番号を振ってみたところ、form.is_validで引っかかっているようです。
イメージ説明

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

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

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

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

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

guest

回答1

0

自己解決

forms.pyでスペルミスをしておりました。
失礼いたしました。

投稿2021/05/09 09:19

Mitsu_

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問