2012-07-24 75 views
0

我創建了自定義clean()方法的模型表單。但是這個clean()方法不再適用了,因爲我無法在QueryDict中找到數據,所以我創建了一個不適用於該模型的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'] 

這是錯誤:

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 2012-07-24 12:01:25

+0

在訪問清潔屬性之前,你是否調用超級清潔方法?類似_super(MyModelForm,self).clean()_ – Rohan 2012-07-24 12:04:27

+0

不,我沒有調用任何超級乾淨的方法。 – 2012-07-24 12:10:28

回答

2

在你clean_value方法,你應該從self.cleaned_data,不self.data獲取價值。有關示例,請參閱cleaning a specific field attribute上的文檔。

self.data是您初始化表單時使用的原始POST或GET數據。它不包含名爲value的密鑰,因爲密鑰爲prefixed,其值爲form-0-

試着改變你的清潔方法如下:

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

非常感謝。:) – 2012-07-24 12:30:52

+0

不客氣:) – Alasdair 2012-07-24 12:31:39