2013-04-01 101 views
1

我試圖只得到窗體的錯誤信息。但是有消息顯示特殊字符。如何獲得form.errors的確切消息?

這裏是我的代碼:

forms.py

class FilterForm(forms.ModelForm): 
    ........... 

    def clean(self): 
     cleaned_data = super(FilterForm, self).clean() 
     payee = cleaned_data.get("payee") 
     memo = cleaned_data.get("memo") 

     if not payee or not memo: 
      raise forms.ValidationError(
       "You must put a value either for Payee or Memo") 

     return cleaned_data 

views.py

..............  

if request.method == 'POST': 
    form = FilterForm(request.user, request.POST, instance=filter) 
    if form.is_valid(): 
     form.save() 
     messages.success(request, "New rule created successfully") 
    else: 
     messages.error(request, [v[0].__str__() for k, v in form.errors.items()]) 

........... 

當我提交無效的形式。我得到這樣的輸出:

['You must put a value either for Payee or Memo'] 

如何獲得只有消息沒有這[' ']

//the error message is shown from here 
messages.error(request, [v[0].__str__() for k, v in form.errors.items()]) 

回答

2

要創建一個使用列表解析表達式[v[0].__str__() for k,v in form.errors.items()]名單,這就是你所得到的[ ]

這裏是一個更好的方法去做你想什麼:

errors = '<br />'.join('<br />'.join(i for i in form.errors.values())) 
messages.error(request, errors) 

你的形式可以提高多個錯誤,這就是爲什麼你需要循環,並獲取每個錯誤項。標準的做法是要通過形式回視圖,然後從表單對象本身顯示錯誤:

if form.is_valid(): 
    # do stuff 
else: 
    return render(request,{'form': form}) 

然後在您的視圖:

{% if form.errors %} 
    <strong>Please fix the errors</strong><br /> 
{% endif %} 
<form> 
    {% for field in form %} 
     {{ field.errors }} 
     {{ field.label_tag }}: {{ field }} 
    {% endfor %} 
    <input type="submit" /> 
</form> 
+0

我得到這個錯誤'序列項0 :期望的字符串,ErrorList找到了' – catherine

+0

我現在得到了正確的答案,我修改了你的答案 – catherine

+0

不用擔心在內置消息中獲取它,因爲我們的模板腳本可以處理這個問題。 – catherine

相關問題