验证错误未显示

时间:2017-12-02 21:39:45

标签: django

所以我一直坚持为什么验证错误没有显示给这个特定的表单。它们在我所有其他形式上都很好,但不是这个。

我可以凭经验看到验证工作,因为当office_street_address为none时,表单不会保存。但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 个答案:

答案 0 :(得分:1)

在您的情况下,如果表单有效,则保留表单,之后即使表单无效,也会进行重定向。这应该有所帮助:

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