ジャンゴでは、チェックボックスをオフにするとオブジェクトの削除がトリガーされるため、チェックボックスを動的に無効にするコードがあります。オブジェクトを削除してはならない場合、チェックボックスは無効にレンダリングされ、送信されません。
ただし、ビューでは、form.cleaned_data にキー「is_user」がまだ含まれているため、false として送信されたチェックボックスと送信されていないチェックボックスを区別できません。
フォーム.py
if somecondition:
self.fields["is_user"].widget.attrs['disabled'] = True
ビュー.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 には、送信されていないフィールドのキーが含まれていないと予想していました。チェックなしで提出されたのではなく、提出されていないかどうかをどのように検出できますか?