現在、updateviewのなかにformsetを作成しているのですが、is_vaild()
でうまくいきません。
こちらのサイトを参考に進めたのですがうまくいかなかったので質問させていただきました。
原因の特定方法などアドバイスをいただきたいです。
python
1class ItemUpdateView(generic.UpdateView): 2 model = Item 3 form_class = PostForm 4 template_name = 'app/item_form.html' 5 6 def get_context_data(self, **kwargs): 7 ctx = super(ItemUpdateView, self).get_context_data(**kwargs) 8 9 ctx.update(dict(formset=Formset(self.request.POST or None, self.request.FILES or None, instance=self.object))) 10 11 return ctx 12 13 def form_valid(self, form): 14 ctx = self.get_context_data() 15 print("エラー1") 16 formset = ctx['formset'] 17 18 if formset.is_valid(): 19 self.object = form.save(commit=False) 20 self.object.save() 21 print("エラー2") 22 23 formset.save() 24 25 return redirect(self.get_success_url()) 26 else: 27 print("エラー3") 28 ctx['form'] = form 29 return self.render_to_response(ctx) 30
ファイルも扱っているのでform
にはenctype="multipart/form-data"
を入れています。
html
1 <form action="" method="POST" enctype="multipart/form-data"></form>
forms.pyではfields='__all__'
にせず、使うものだけ入れています。
python
1Formset = forms.inlineformset_factory( 2 Item, SubItem, fields=('name', 'image', 'number', 'cat', 'deadline'), 3 extra=6, max_num=6, can_delete=False, 4 widgets = { 5 'image': FileInputWithPreview, 6 'deadline':datetimepicker.DatePickerInput( 7 format='%Y-%m-%d', 8 options={ 9 'locale': 'ja', 10 'dayViewHeaderFormat': 'YYYY年 MMMM', 11 }) 12 13 } 14 15) 16
やれることは全てやったつもりなのですが、どうもうまくいきません。
アドバイスをいただきたいです。よろしくお願いいたします。
#追記です
自分でもいろいろ調べてChromeの検証ツールで原因を調べました。
そこで、設定しているはずのないhidden
と書かれた項目があり、これが原因かなと思っているのですが。
消し方が解らず、そもそもエラーの原因なのか、何の用途に使用するのかがわかりません。
もしわかる方がいれば教えてください。よろしくお願いいたします。
html
1<input type="hidden" name="subitem_set-TOTAL_FORMS" value="6" id="id_subitem_set-TOTAL_FORMS"> 2<input type="hidden" name="subitem_set-INITIAL_FORMS" value="6" id="id_subitem_set-INITIAL_FORMS"> 3<input type="hidden" name="subitem_set-MIN_NUM_FORMS" value="0" id="id_subitem_set-MIN_NUM_FORMS"> 4<input type="hidden" name="subitem_set-MAX_NUM_FORMS" value="6" id="id_subitem_set-MAX_NUM_FORMS">
print(formset)
を行いその中で気になった点を抜粋しました。
</select><input type="hidden" name="subitem_set-4-id" id="id_subitem_set-4-id"><input type="hidden" name="subitem_set-4-target" id="id_subitem_set-4-target"></td></tr> <tr><td colspan="2"><ul class="errorlist nonfield"><li>(隠しフィールド id) このフィールドは必須です。</li></ul></td></tr>
回答2件
あなたの回答
tips
プレビュー