djangoではチェックボックスを無効にするコードがあります。オブジェクトを削除しないと、チェックボックスが無効になり、送信されません。Django:チェックボックスがサブミットされているかどうかを検出します
しかし、ビューでは、form.cleaned_dataにはまだキー "is_user"が含まれているため、チェックボックスはfalseとして送信され、チェックボックスは送信されません。
forms.py
if somecondition:
self.fields["is_user"].widget.attrs['disabled'] = True
views.py
if "is_user" in form.cleaned_data:
if form.cleaned_data["is_user"] == False:
do dangerous deleting
return redirect(page)
elif form.cleaned_data["is_user"] == True:
process information
return redirect(page)
else:
return redirect(page)
私はそのチェックボックス不可状態からフォームを送信し、PDBシェルで私が入力できます。
(pdb) form.cleaned_data
{'is_user': False}
form.cleaned_dataには、送信されていないフィールドのキーが含まれていないと予想していました。チェックされていないまま送信されたのではなく、送信されていないかどうかをどのように検出できますか?
第1に、コードの意図について正しいですし、第2モデルの関連オブジェクトの存在ではなく、最初のモデルのブール値フィールドの状態に対応するように変更しました。そのような軽快さに感謝します。送信されたデータの問題では、フォームのcleaned_dataにはキーは含まれていますが、無効なチェックボックスの値は含まれていないと言っていますか? – nimasmi
いいえ: 'cleaned_data'は、チェックボックスのキーに' False'を含みます。 –