2012-04-05 3 views
0

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가 제출되지 않은 필드의 키를 포함하지 않을 것으로 예상했습니다. 선택하지 않은 채로 제출하지 않고 제출되지 않았는지 어떻게 확인할 수 있습니까?

답변

3

체크되지 않은 체크 박스와 제출되지 않은 체크 박스 사이에는 HTML에 차이가 없습니다. 간단히 말해 확인란을 선택 취소하면 POST에 포함되지 않습니다. 이것은 장고와는 아무 관련이 없지만 브라우저가 작동하는 방식입니다.

이러한 상태를 구분해야한다면 is_user의 라디오 버튼 집합이 true이고 false 값이어야합니다. 또는 확인란을 선택해야하는 경우 숨겨진 컨트롤을 선택하지 않은 상태에서 일부 Javascript를 사용하여 컨트롤을 설정할 수도 있습니다.

어떤 경우에도 을 삭제하는 코드가있는 경우에 체크 표시가되어 있지 않은 경우 매우 분명히 잘못된 방법입니다. 액션은 항상 최소한으로 파괴해야합니다. 삭제와 같은 작업을 수행하려면 긍정적 인 액션이 필요합니다.

+0

첫 번째로, 코드의 의도가 맞습니다. 두 번째 모델에서 관련 개체가있는 것이 아니라 첫 번째 모델의 부울 필드 상태에 응답하도록 작업을 변경했습니다. 그 녀석에게 감사드립니다. 제출 된 데이터의 문제에서 양식의 정리 된 데이터에 키가 있지만 비활성화 된 확인란의 가치가 없다고 말하는 중입니까? – nimasmi

+0

No :'cleaned_data'는 체크 박스의 키에 대해'False'를 포함합니다 (사용 안함인지 여부를 불문합니다). –

관련 문제