2012-07-24 3 views
0

맞춤형 clean() 방법이있는 모델 양식을 만들었습니다. 그러나이 clean() 메서드는 더 이상 작동하지 않습니다. 이후 QueryDict에서 데이터를 찾을 수 없기 때문에 해당 modelform에서 formset을 만들었습니다. 그래서 그것을 작동하게하기 위해 지금해야 할 일 (formset QueryDict에서 폼과 관련된 데이터를 찾으십시오)? Django Formsets : 구성원 양식 정리 메소드가 작동하지 않습니까?

는 회원의 형태 :

class option_form(ModelForm): 
    class Meta: 
     model = option 
     exclude = ('warval','user') 

    def clean_value(self): 
     self.data = self.data.copy() 
     print(self.data) 
     if self.data['value']=='[email protected]': 
      raise forms.ValidationError("This can't be your email address") 

     return self.data['value'] 

그리고 이것은 오류이다 : 당신의 clean_value 방법에서

Exception Type: MultiValueDictKeyError 
Exception Value: "Key 'value' not found in <QueryDict: {u'form-1-value': [u''], u'form-INITIAL_FORMS': [u'1'], u'form-TOTAL_FORMS': [u'2'], u'form-MAX_NUM_FORMS': [u''], u'form-0-id': [u'1'], u'form-1-id': [u''], u'csrfmiddlewaretoken': [u'e645de635fe47559ac540eb32ea4d08d'], u'form-0-value': [u'[email protected]']}>" 
+0

할 수있는 도움이 몇 가지 예제 코드는 문제를 분리 할 수 ​​있습니다. – danihp

+0

깨끗한 상태의 속성에 액세스하기 전에 super의 깨끗한 메소드를 호출합니까? _super (MyModelForm, self)와 같은 것 .clean() _ – Rohan

+0

아니, 나는 슈퍼의 깨끗한 방법을 부르지 않을거야. –

답변

2

, 당신은 self.cleaned_data하지 self.data에서 값을 가져 오기합니다. 예를 들어 cleaning a specific field attribute의 문서를 참조하십시오.

self.data은 사용자가 양식을 초기화 한 원시 POST 또는 GET 데이터입니다. 키가 form-0-과 같은 값인 prefixed이기 때문에 value이라는 키는 포함되어 있지 않습니다.

는 다음에 깨끗한 방법을 변경해보십시오 :

def clean_value(self): 
    value = self.cleaned_data['value'] 
    if value == '[email protected]': 
     raise forms.ValidationError("This can't be your email address") 
    return value 
+0

대단히 감사합니다. :) –

+0

당신은 환영합니다 :) – Alasdair

관련 문제