2012-08-06 27 views
0

我有這個代碼檢查窗體中的錯誤。用戶犯了一些錯誤後,它顯示第一個發現的錯誤。但如果錯誤屬於多個錯誤,它將只顯示第一個錯誤。如何在「if」中找到一個後繼續檢查錯誤 - Django,Python

#forms.py 
    def clean_file_name(self): 
     name = self.cleaned_data['file_name'] 
     if len(name) < 2: 
      raise forms.ValidationError('File name is too short') 
     if FileDescription.objects.filter(file_name = name).exists(): 
      raise forms.ValidationError('File with this name already exists') 
     else: 
      return name 

#template 
<ul> 
    {% for field in form %} 
    {% for error in field.errors %} 
    <li>{{ error }}</li> 
    {% endfor %} 
    {% endfor %} 
</ul> 

如果用戶將使用該名稱已經存在輸入「A」,並在數據庫文件(可以說是那裏之前,我寫長度檢查) 輸出將是:

「文件名太短「

但我想要顯示這兩個錯誤

回答

1

這個怎麼樣?

def clean_file_name(self): 
    name = self.cleaned_data['file_name'] 
    error = '' 
    if len(name) < 2: 
     error += 'File name is too short' 
    if FileDescription.objects.filter(file_name = name).exists(): 
     if error: 
      error += ' ' 
     error += 'File with this name already exists' 
    if error: 
     raise forms.ValidationError(error) 
    return name 

還是你想讓他們作爲兩個單獨的子彈嗎?如果是這樣,您需要將它們添加到self.errors列表中(請參閱Alexander的答案),然後引發ValidationError以確保表單不會處理。

0

從我的代碼,希望它有幫助。

if isinstance(self.errors.get('field_name'), forms.util.ErrorList): 
    self.errors['field_name'].append(_('My error')) 
else: 
    self.errors['field_name'] = forms.util.ErrorList([_('MyError')]) 
相關問題