2017-12-02 84 views
0

所以我堅持爲什麼驗證錯誤沒有顯示這種特殊的形式。他們在我的所有其他表格上顯示得很好,但不是這個。驗證錯誤沒有顯示

我可以憑經驗在工作中看到驗證,因爲當office_street_address爲零時,窗體不會保存。但form.non_field_error似乎沒有任何錯誤。

形式

class PremiumAgentForm(forms.ModelForm): 

    class Meta: 
     model = Agent 
     exclude = ['field1', 'field2', ...] 

    def __init__(self, *args, **kwargs): 
     super(PremiumAgentForm, self).__init__(*args, **kwargs) 

     for visible in self.visible_fields(): 
      visible.field.widget.attrs['class'] = 'form-control' 

    def clean(self): 
     cd = super(PremiumAgentForm, self).clean() 
     a = cd.get('office_street_address') 

     if a == None: 
      raise forms.ValidationError("Error") 

     return cd 

HTML

<form class="row justify-content-center" enctype="multipart/form-data" method="post"> 
     {% csrf_token %} 

     {% for error in form.non_field_errors %} 
     <p style="color: red">{{ error }}</p> 
     {% endfor %} 

     {% if form.non_field_errors %} 
     <p style="color: red">there are errors</p> 
     {% else %} 
     <p>no errors</p> # This is always displayed. 
     {% endif %} 

     <div class="col-sm-4"> 
      {% for field in form %} 
      <div class="form-group pb-3"> 
       {% for error in field.errors %} 
       <p style="color: red">{{ error }}</p> 
       {% endfor %} 
       {{ field.label_tag }} 
       {{ field }} 
       {% if field.help_text %} 
       <small class="form-text text-muted">{{ field.help_text|safe }}</small> 
       {% endif %} 
      </div> 
      {% endfor %} 
      <button class="button2"><span>Submit</span></button> 
     </div> 
    </form> 

views.py

def edit_profile(request): 
    if request.method == 'POST': 
     form = PremiumAgentForm(request.POST, request.FILES, instance=agent) 
     if form.is_valid(): 
      form.save() 
     return HttpResponseRedirect(request.META['HTTP_REFERER']) 
    else: 
     agent = get_object_or_404(Agent, pk=request.user.agent.pk) 
     form = PremiumAgentForm(instance=agent) 
    return render(request, 'edit_profile.html', {'form': form}) 
+1

如果你做'如果一個==無或一個==''' –

回答

1

對於您的情況,您保留表單,如果它是有效的,之後您做了重定向,即使表單無效。這應該有所幫助:

if not form.is_valid(): 
    return render(request, 'edit_profile.html', {'form': form}) 
form.save() 
+0

那會發生什麼,這很好地工作。我不應該忽略我的代碼中「明顯正確」的部分。謝謝! – Valachio