0

ジャンゴでは、チェックボックスをオフにするとオブジェクトの削除がトリガーされるため、チェックボックスを動的に無効にするコードがあります。オブジェクトを削除してはならない場合、チェックボックスは無効にレンダリングされ、送信されません。

ただし、ビューでは、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 には、送信されていないフィールドのキーが含まれていないと予想していました。チェックなしで提出されたのではなく、提出されていないかどうかをどのように検出できますか?

4

1 に答える 1

4

チェックされていないチェックボックスと送信されていないチェックボックスの間に HTML の違いはありません。簡単に言えば、チェックボックスをオフにすると、それは POST に含まれません。これは Django とは何の関係もありませんが、ブラウザがどのように機能するかだけです。

これらの状態を本当に区別する必要がある場合は、別のコントロールが必要になります。おそらくis_userwithtruefalsevalues のラジオ ボタンのセットです。または、チェックボックスが絶対に必要な場合は、Javascript を使用して、チェックされていないときに非表示のコントロールを設定できます。

いずれにせよ、チェックボックスがチェックされていない限り削除するコードを持つことは、間違いなく間違った方法です。アクションは、常にデフォルトで最も破壊的でないものにする必要があります。削除などを行うには、積極的なアクションが必要です。

于 2012-04-05T21:10:20.957 に答える