Показать все сообщения об ошибках, когда проверка не пройдена - PullRequest
0 голосов
/ 04 июня 2019

Я хочу отображать все сообщения об ошибках выше формы, когда поля формы не проверяются должным образом. Например, когда я помещаю число в поле first_name и last_name и отправляю форму, ошибки (2) будут отображаться над формой в тегах li . На данный момент все валидаторы форм объявлены в forms.py.

Что я должен изменить в шаблоне / представлении, чтобы отображать не имя поля, а содержимое ValidationError в тегах li ?

views.py

    if request.method == 'POST':
        person_form = PersonForm(request.POST)
        phone_form = PhoneForm(request.POST)
        email_form = EmailForm(request.POST)

        if person_form.is_valid() and phone_form.is_valid() and email_form.is_valid():
            person = person_form.save()
            phone = phone_form.save(False)
            email = email_form.save(False)

            phone.person = person
            email.person = person

            phone.save()
            email.save()
            messages.success(request, f"Dodano nowy kontakt: {request.POST['first_name']} {request.POST['last_name']}")
            return HttpResponseRedirect('/')

    else: # GET
        person_form = PersonForm()
        phone_form = PhoneForm()
        email_form = EmailForm()

    return render(request,
                  'address_book/add_contact.html',
                  {
                      'person_form':person_form,
                      'phone_form':phone_form,
                      'email_form':email_form,
                  })

forms.py

def validate_first_name(str):
    if any(char.isdigit() for char in str):
        raise forms.ValidationError('Pole Imię musi zawierać tylko litery')


def validate_last_name(str):
    if any(char.isdigit() for char in str):
        raise forms.ValidationError('Pole Nazwisko musi zawierać tylko litery')

class PersonForm(forms.ModelForm):

    first_name = forms.CharField(label='Imię', validators=[validate_first_name, ])
    last_name = forms.CharField(label='Nazwisko', validators=[validate_last_name, ])

    class Meta:
        model = Person
        fields = '__all__'

* add_contact.html (шаблон) *

 <div class="row">
            <div class="addEntryBox">
                {% if person_form.errors or phone_form.errors or email_form.errors %}
                    {% for error in person_form.errors %}
                        <li><strong>{{ error|escape }}</strong></li>
                    {% endfor %}

                    {% for error in phone_form.errors %}
                        <li><strong>{{ error|escape }}</strong></li>
                    {% endfor %}

                    {% for error in email_form.errors %}
                        <li><strong>{{ error|escape }}</strong></li>
                    {% endfor %}

                {% endif %}
                <form action="{% url 'address_book:contact_add' %}" method="post">
                    {% csrf_token %}
                    {{ person_form.as_p }}
                    {{ phone_form.as_p }}
                    {{ email_form.as_p }}
                    <div><button id="saveContactButton" type="submit" class="waves-effect waves-light btn"><i class="small material-icons left">save</i>Zapisz</button></div>
                </form>
            </div>
        </div>

Фактический результат: https://ibb.co/7bC8YCX

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...