コード表のテーブルを用意して、動的なチェックボックスを使ってFORMでデータを取得しようと思っています。
デバッグをするとform.is_validがTrueになりません。
(コメントアウトしてありますが、)色々調べてpost関数の中でCHOICES再定義してみたりしたのですが、上手く動きませんでした。
また、if form.is_validを外して先に進めてみたのですが、form.creaned_dataが使えないようで、次のconfirm.htmlでデータ保存まで進めませんでした。
なおデバッガーを見ると、dataのQueryDictは'purpose':['3','4']となっています。
今回の事象に関係あるかわかりませんが、bootstrapを使ってチェックボックスを作っています。
また、もしかしたら全然違う理由でis_validになっている可能性もあるかもしれません。
どうぞよろしくお願いします。
forms
1class RegisterFacilityForm(forms.Form): 2 purpose_name = [purpose1['name'] for purpose1 in Purpose.objects.values('name')] 3 purpose_pk = [purpose2['id'] for purpose2 in Purpose.objects.values('id')] 4 PURPOSE_CHOICES = [(s1, s2) for s1, s2 in zip(purpose_pk, purpose_name)] 5 6 name = forms.CharField(max_length=30, label='施設名称') 7 description = forms.CharField(label='説明', widget=forms.Textarea(), required=False) 8 image = forms.ImageField(required=False) 9 purpose = forms.ChoiceField( 10 label='利用目的', 11 widget=forms.CheckboxSelectMultiple, 12 choices=PURPOSE_CHOICES, 13 required=False, 14 )
facilityView
1class RegisterFacilityView(LoginRequiredMixin, View): 2 form_class = RegisterFacilityForm 3 4 def get(self, request, *args, **kwargs): 5Store.objects.filter(id=self.request.user.id).select_related('owner')[0] 6 form = self.form_class 7 return render(request, 'app/register_facility.html', { 8 'form': form, 9 }) 10 11 def post(self, request, *args, **kwargs): 12 form = self.form_class(request.POST or None) 13 # purpose_name = [purpose1['name'] for purpose1 in Purpose.objects.values('name')] 14 # purpose_pk = [purpose2['id'] for purpose2 in Purpose.objects.values('id')] 15 # PURPOSE_CHOICES = [(s1, s2) for s1, s2 in zip(purpose_pk, purpose_name)] 16 # form.fields['purpose'].choices = PURPOSE_CHOICES 17 if form.is_valid(): 18 context = {'form': form} 19 return render( 20 request, 21 'app/register_facility_confirm.html', 22 context=context 23 ) 24 25 return render(request, 'app/register_empty.html', { 26 'form': form 27 })
register_facilityhtml
1 <tr> 2 <th class="header">利用目的<span class="badge badge-danger ml-2">必須</span></th> 3 <td class="data"> 4 <div class="form-group"> 5 6 {% for radio in form.purpose %} 7 {{ radio.tag }} 8 <label>{{ radio.choice_label }} </label> 9 {% endfor %} 10 </div> 11 12 </td> 13 </tr>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。