前提・実現したいこと
お世話になります。
メルカリのようなサイトを作っております。
商品編集ページのところで、編集した後に更新ボタンを押しても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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。