2016-08-16 7 views
0

) (클린에서 캔트 변화 필드 값을 형성한다 체크 박스가 선택되지 않은 경우에도 사용자 값에 의해 여전히 업데이트됩니다 (그리고 if 블록이 실행되고 디버깅 됨). 또한 self.instance.details 대신 self.cleaned_data['details']을 변경하려고 시도했지만 작동하지 않습니다.장고 모델은 내가 간단한 모델 양식, 내가 추가 한 간단한 체크 박스를

이것은별로 중요하지 않습니다. 클라이언트 쪽에서 확인란을 선택하면 세부 정보 필드를 숨기거나 표시하는 간단한 자바 스크립트 코드가 있습니다. Customizing validation 가입일

답변

0
class OrderForm(forms.ModelForm): 
    more_info = models.BooleanField(required=False) 

    def clean(self): 
     cleaned_data = super().clean() 
     if not cleaned_data['more_info']: 
      cleaned_data['details'] = '' 
     return cleaned_data 

: 그것이 원한다면

이 방법은 [clean()] 완전히 다른 사전을 되돌릴 수는 cleaned_data로서 사용될 것이다. 또한

:

  1. CheckboxInputBooleanField에 대한 기본 위젯입니다.

  2. BooleanField note :

    당신이 할 수있는 형태로 부울을 포함 할 경우 중 하나 True 또는 False (예를 들어 체크 또는 체크되지 않은 체크 박스), 당신은 BooleanField를 만들 때 required=False에 전달하는 기억해야한다 .

+1

다음 코드가 나를 위해 작동하지 않습니다. – user3599803

0

대신 cleaned_data을 업데이트하는, 당신은 슈퍼의 깨끗한 첫번째 전화를 당신이 필요로하는 clean 방법을 사용하려는 경우, 대신

def save(self, force_insert=False, force_update=False, commit=True, *args, **kwargs): 
    order = super(OrderForm, self).save(commit=False) 
    if not self.cleaned_data.get('more_info', False): 
     order.details = "" 
    if commit: 
     order.save() 
    return order 

추가적으로 save 메서드를 재정의하려고합니다.

def clean(self): 
    cleaned_data = super(BailiffAddForm, self).clean() 
    if not cleaned_data.get('more_info', False): 
     ... 
    return cleaned_data