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

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

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

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

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

Q&A

解決済

1回答

993閲覧

動的なチェックリストのPOST関数でis_validがTrueにならない

taro_yamada

総合スコア55

Django

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

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

0グッド

0クリップ

投稿2021/09/26 11:56

コード表のテーブルを用意して、動的なチェックボックスを使って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>

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

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

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

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

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

guest

回答1

0

自己解決

TEMPLATEで全く別の必須項目が抜けていたのでエラーになっていました。

投稿2021/09/28 12:39

taro_yamada

総合スコア55

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問