2017-12-02 25 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

'== Noneまたはa == ''なら' ' –

答えて

1

あなたのケースでは、有効な場合はフォームを保持し、その後はフォームが有効でない場合でもリダイレクトを行います。これは役に立ちます:

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

'とすればどうなるでしょうか?私は自分のコードの "明らかに正しい"部分を見逃してはいけません。ありがとう! – Valachio