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

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

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

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

Python

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

Q&A

解決済

1回答

1561閲覧

DjangoのUpdateViewでDBに保存された情報を更新したいです。

Mitsu_

総合スコア10

Django

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

Python

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

0グッド

0クリップ

投稿2021/05/20 08:50

前提・実現したいこと

お世話になります。
メルカリのようなサイトを作っております。
商品編集ページのところで、編集した後に更新ボタンを押してもDBに保存されません。
特に、エラーメッセージは出ておらず、どこが間違っているかわからない状態なのですが、
form.is_valid()の直前で処理が止まってしまっているようです。

views.pyのUpdateView

def post(self, request, *args, **kwargs): print('1') product_edit_form = forms.ProductEditForm(request.POST or None ,request.FILES or None) print('2') if product_edit_form.is_valid(): print('3') product_edit_form.save()

ターミナル

[20/May/2021 17:26:28] "GET /SellText/mypage_product_edit/1 HTTP/1.1" 200 11251 1 2 [20/May/2021 17:26:42] "POST /SellText/mypage_product_edit/1 HTTP/1.1" 200 11197

該当のソースコード

html

1{% load widget_tweaks %} 2<form class="row m-5" action="{% url 'SellText:mypage_product_edit' pk=object.pk %}" method="POST" enctype="multipart/form-data" > 3 <i class="fas fa-gift text-center fa-6x"></i> 4 <h1 class="h3 mb-3 fw-normal text-center mt-3">商品情報編集ページ</h1> 5 {% csrf_token %} 6 7 <div class="col-12"> 8 <div class="mb-3"> 9 <label for="exampleFormControlInput1" class="form-label">商品名</label> 10 <input type="text" class="form-control" id="exampleFormControlInput1" value="{{object.product_name}}" name="product_name" placeholder="50文字まで"> 11 12 </div> 13</div> 14 <div class="mb-3"> 15 <label for="exampleFormControlTextarea1" class="form-label">商品説明</label> 16 <input type="text" value="{{object.product_description}}" name="product_description" class="form-control" id="exampleFormControlTextarea1" placeholder="商品の説明: 200文字以内" > 17 18 </div> 19 20 <div class="mb-3"> 21 <label for="exampleFormControlTextarea1" class="form-label">商品の状態</label> 22 23 <select value="{{object.product_status}}" name="product_status" class="form-select" aria-label="Default select example"> 24 <option value="新品未使用">新品未使用</option> 25 <option value="未使用に近い">未使用に近い</option> 26 <option value="3">目立った傷や汚れは無し</option> 27 <option value="書き込みや傷がある">書き込みや傷がある</option> 28 <option value="状態は最悪だが使える">状態は最悪だが使える</option> 29 </select> 30 </div> 31 32 <div class="input-group mb-3"> 33 <label class="input-group-text" for="inputGroupFile01">商品画像 1枚目</label> 34 <input value="{{object.product_picture1}}" name="product_picture1" type="file" class="form-control" id="inputGroupFile01"> 35 36 </div> 37 38 <div class="input-group mb-3"> 39 <label class="input-group-text" for="inputGroupFile01">商品画像 2枚目</label> 40 <input value="{{object.product_picture2}}" name="product_picture2" type="file" class="form-control" id="inputGroupFile01"> 41 42 </div> 43 <div class="input-group mb-3"> 44 <label class="input-group-text" for="inputGroupFile01">商品画像 3枚目</label> 45 <input value="{{object.product_picture3}}" name="product_picture3" type="file" class="form-control" id="inputGroupFile01"> 46 47 </div> 48 49 50 <div class="mb-3"> 51 <label for="exampleFormControlTextarea1" class="form-label">発送日</label> 52 53 <select value="{{object.product_delivery}}" name="product_delivery" class="form-select" aria-label="Default select example"> 54 55 <option value="1~2日以内">1~2日以内</option> 56 <option value="3~4日以内">3~4日以内</option> 57 <option value="5~7日以内">5~7日以内</option> 58 </select> 59 </div> 60 61 <div class="mb-3"> 62 <label for="exampleFormControlInput1" class="form-label">授業名</label> 63 <input value="{{object.lecture_name}}" name="lecture_name" type="text" class="form-control" id="exampleFormControlInput1" placeholder="50文字まで"> 64 65 </div> 66 67 <div class="mb-3"> 68 <label for="exampleFormControlTextarea1" class="form-label">学科</label> 69 <select value="{{object.faculty}}" name="faculty" class="form-select" aria-label="Default select example"> 70 <option value="工学部">工学部</option> 71 <option value="共同教育学部">共同教育学部</option> 72 <option value="地域デザイン科学部">地域デザイン科学部</option> 73 <option value="農学部">農学部</option> 74 <option value="国際学部">国際学部</option> 75 <option value="大学院">大学院</option> 76 <option value="その他(学部共通、全学年共通 etc..)">その他(学部共通、全学年共通 etc..)</option> 77 </select> 78 79 </div> 80 81 <div class="mb-3"> 82 <label for="exampleFormControlTextarea1" class="form-label">学部</label> 83 <select value="{{object.department}}" name="department" class="form-select" aria-label="Default select example"> 84 <option value="地域デザイン:コミュニティ">地域デザイン:コミュニティ</option> 85 <option value="地域デザイン:建築都市">地域デザイン:建築都市</option> 86 <option value="地域デザイン:社会基盤">地域デザイン:社会基盤</option> 87 <option value="国際学科">国際学科</option> 88 <option value="共同教育: 教育人間科学系">共同教育: 教育人間科学系</option> 89 <option value="共同教育: 人文社会系">共同教育: 人文社会系</option> 90 <option value="共同教育: 自然科学系">共同教育: 自然科学系</option> 91 <option value="共同教育: 芸術・生活・健康系">共同教育: 芸術・生活・健康系</option> 92 <option value="工学: 物質環境化学コース">工学: 物質環境化学コース</option> 93 <option value="工学: 機械システム工学コース">工学: 機械システム工学コース</option> 94 <option value="工学: 情報電子オプティクスコース">工学: 情報電子オプティクスコース</option> 95 <option value="工学: その他">工学: その他</option> 96 <option value="農学: 生物資源科学">農学: 生物資源科学</option> 97 <option value="農学: 応用生命化学">農学: 応用生命化学</option> 98 <option value="農学: 農業環境工学科">農学: 農業環境工学科</option> 99 <option value="農学: 農業経済学科">農学: 農業経済学科</option> 100 <option value="農学: 森林科学科">農学: 森林科学科</option> 101 <option value="大学院: 地域創生科学研究科">大学院: 地域創生科学研究科</option> 102 <option value="大学院: 教育学研究科">大学院: 教育学研究科</option> 103 <option value="大学院: 連合農学研究科">大学院: 連合農学研究科</option> 104 105 106 </select> 107 108 </div> 109 110 <div class="mb-3"> 111 <label for="exampleFormControlTextarea1" class="form-label">学年</label> 112 <select value="{{object.grade}}" name="grade" class="form-select" aria-label="Default select example"> 113 <option value="学部1年">学部1年</option> 114 <option value="学部2年">学部2年</option> 115 <option value="学部3年">学部3年</option> 116 <option value="学部4年">学部4年</option> 117 <option value="大学院1年">大学院1年</option> 118 <option value="大学院2年">大学院2年</option> 119 <option value="その他">その他</option> 120 </select> 121 122 </div> 123 <div class="mb-3"> 124 <label value="{{object.place}}" name="place" for="exampleFormControlTextarea1" class="form-label">受け取り場所</label> 125 <select class="form-select" aria-label="Default select example"> 126 <option value="峰キャンパス前 ミニストップ">峰キャンパス前 ミニストップ</option> 127 <option value="陽東キャンパス前 ミニストップ">陽東キャンパス前 ミニストップ</option> 128 </select> 129 130 </div> 131 132 <div class="input-group mb-3"> 133 <span class="input-group-text"></span> 134 <span class="input-group-text">0 ~ 9,999,999円</span> 135 <input value="{{object.price}}" name="price" type="number" class="form-control" placeholder="価格から手数料 5%差引かれます" aria-label="Dollar amount (with dot and two decimal places)"> 136 137 </div> 138 {{product_edit_form.user}} 139 <div class="col-12 mt-5"> 140 <input type="submit" class="btn btn-outline-primary" value="更新する"> 141 </div> 142 143</form>

views.py

class MypageProductEditView(SuccessMessageMixin,UpdateView): model = Product form_class = forms.ProductEditForm template_name ='user_product_edit.html' success_message = '更新に成功しました。' def get_success_url(self): return reverse_lazy('SellText:my_page') def get_queryset(self): qs = super(MypageProductEditView, self).get_queryset() qs = qs.filter(id = self.kwargs['pk']) return qs def post(self, request, *args, **kwargs): print('1') product_edit_form = forms.ProductEditForm(request.POST or None ,request.FILES or None) print('2') if product_edit_form.is_valid(): print('3') product_edit_form.save() return super(MypageProductEditView, self).post(request,*args, **kwargs)

urls.py

path('mypage_product_edit/<int:pk>',views.MypageProductEditView.as_view(),name='mypage_product_edit'),

forms.py

class ProductEditForm(forms.ModelForm, ): product_name = forms.CharField(label='商品名' ,widget=forms.TextInput(attrs={'placeholder':'50文字まで'})) product_description = forms.CharField(label='商品説明',widget=forms.TextInput(attrs={'placeholder':'商品の説明: 200文字以内','rows': 5, 'colos':60})) product_status = forms.CharField(label='商品の状態') product_picture1 = forms.FileField(label='画像: 1枚目') product_picture2 = forms.FileField(label='画像: 2枚目') product_picture3 = forms.FileField(label='画像: 3枚目') product_delivery = forms.CharField(label='発送日') lecture_name = forms.CharField(label='授業名') faculty = forms.CharField(label='関係する学部') department =forms.CharField(label='学科') grade = forms.CharField(label='学年') price = forms.IntegerField(label='商品価格',widget=forms.TextInput(attrs={'placeholder':'販売価格から5%の手数料が差引かれます'})) place = forms.CharField(label='受け取り場所') class Meta: model = Product fields=('product_name','product_description','product_status','product_delivery','price','product_picture1','product_picture2','product_picture3','lecture_name','faculty','department','grade','place')

models.py

class Product(models.Model): product_name = models.CharField(max_length=50) product_description = models.CharField(max_length=200) product_status = models.CharField(max_length=50) product_delivery = models.CharField(max_length=50) price = models.IntegerField() product_picture1 = models.FileField(upload_to='product_picture1/') product_picture2 = models.FileField(upload_to='product_picture2/') product_picture3 = models.FileField(upload_to='product_picture3/') lecture_name = models.CharField(max_length=100) faculty = models.CharField(max_length=50) department = models.CharField(max_length=50) grade = models.CharField(max_length=50) place = models.CharField(max_length=20) like = models.IntegerField(default=0)

補足情報(FW/ツールのバージョンなど)

Django3, Python3.8

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

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

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

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

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

guest

回答1

0

自己解決

selectタブのnameの位置が間違えておりました。

投稿2021/05/20 11:27

Mitsu_

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問