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

相关问题