0

views.pyDjango的:如何顯示形狀誤差爲每個模型對象

def add_phone(request): 
    user=request.user 
    try: 
     phone = Phone_info.objects.get(user=request.user) 
    except: 
     phone = None 
    save_msg = '' 
    form_error = False 
    phoneForm = PhoneForm({'user':request.user}) 
    phoneForm = PhoneForm(instance=phone) 
    if request.method=='POST': 
     phoneForm = PhoneForm(request.POST,instance=phone)  
     if phoneForm.is_valid(): 
      phone=phoneForm.save(commit=False) 
      phone.user = user 
      phone.save() 
      save_msg = "Your details have been saved" 


    return render_to_response('incident/add_phone.html', 
    { 
    'about_menu': True, 
    'PhoneForm' :phoneForm, 
    'save_msg':save_msg, 
    'form_error':form_error, 
    }, 
    context_instance=RequestContext(request)) 

forms.py

class PhoneForm(forms.ModelForm): 
    emergency = forms.CharField(required=True) 
    emergency_number = forms.IntegerField(required=True) 
    class Meta: 
     model = Phone_info 
     fields = ['name1','number1','name2','number2','name3','number3','emergency','emergency_number'] 


def clean(self): 
    name1 = self.cleaned_data.get("name1", None) 
    number1 = self.cleaned_data.get("number1", None) 
    name2 = self.cleaned_data.get("name2", None) 
    number2 = self.cleaned_data.get("number2", None) 
    name3 = self.cleaned_data.get("name3", None) 
    number3 = self.cleaned_data.get("number3", None) 
    if name1 and not number1: 
     raise forms.ValidationError("This field is required") 
    if number1 and not name1: 
     raise forms.ValidationError("This field is required") 
    if name2 and not number2: 
     raise forms.ValidationError("This field is required") 
    if number2 and not name2: 
     raise forms.ValidationError("This field is required") 
    if name3 and not number3: 
     raise forms.ValidationError("This field is required") 
    if number3 and not name3: 
     raise forms.ValidationError("This field is required") 

    return self.cleaned_data 

template.html

<table width="100%" cellpadding="0" cellspacing="0" id="phone"> 

       <tr> 
        <td colspan="2"><h1 align="left">Call - default telephone numbers</h1>  </td> 

       <tr> 
        <td>Person or area</td> 
        <td>Phone number</td> 
       </tr> 

       <tr> 
        <td>{{ PhoneForm.name1 }}{{ PhoneForm.name1.errors }}</td> 
        <td>{{ PhoneForm.number1 }}{{ PhoneForm.number1.errors }}</td> 
       </tr> 
       <tr> 
        <td>{{ PhoneForm.name2 }}{{ PhoneForm.name2.errors }}</td> 
        <td>{{ PhoneForm.number2 }}{{ PhoneForm.number2.errors }}</td> 
       </tr> 
       <tr> 
        <td>{{PhoneForm.name3}}{{ PhoneForm.name3.errors }}</td> 
        <td>{{PhoneForm.number3}}{{ PhoneForm.number3.errors }}</td> 
       </tr> 
       <tr> 
        <td>Emergency</td><td>Phone number</td> 
       </tr> 
       <tr> 
        <td>{{ PhoneForm.emergency }}{{ PhoneForm.emergency.errors }}</td> 
        <td>{{ PhoneForm.emergency_number }}{{ PhoneForm.emergency_number.errors }}</td> 
       </tr> 
       <tr><td colspan="2" align="right"> <p style=margin-top:2cm;>{% include "buttons/save.html" %}</p></td></tr> 

      </table></form> 

它不是拋個別表單驗證的錯誤消息。我正在使用PhoneForm,並且對於單個字段,應該發生單個錯誤消息。我檢查了它,我不是可以找到我想念的東西。可能很愚蠢,需要幫助解決。

謝謝

回答

2

但是你沒有運行檢查單個字段。你正在定義整體方法,並拋出一般性錯誤 - 你所說的只是「這個字段是必需的」,而沒有定義你正在談論的領域。我不知道你如何期望Django知道。

很正常的事情做的是覆蓋特定領域的清潔方法,例如clean_number1等你是正確的不要做,因爲每個字段依賴於其他領域,所以clean()是正確的地方。

但作爲文檔顯示,就可以從inject field-specific errors一般clean方法:

self._errors['number1'] = self.error_class(['This field is required']) 
del self.cleaned_data['number1'] 
+0

我以前不會去想that.Thanks牛! – user2086641

相關問題