Визуализация ошибок поля в Джанго-хрустящая-форма с инлайн формами

Обновить

December 2018

Просмотры

6.4k раз

6

Я использую bootstrap3 в качестве шаблона пакета по умолчанию в django_crispy_forms и пытаюсь сделать форму с хрустящим тегом:

{% crispy form %}

Моя форма класс имеет следующие вспомогательные атрибуты:

class TheForm(forms.Form):
    adv_var = forms.CharField(label="variable", max_length=70)
    value = forms.FloatField()

    def __init__(self, *args, **kwargs):
        super(TheForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper()

        self.helper.form_method = 'post'
        self.helper.form_class = 'form-inline'
        self.helper.field_template = 'bootstrap3/layout/inline_field.html'

        self.helper.layout = Layout(
            'adv_var', 'value',
            ButtonHolder(
                Submit('submit', 'Start', css_class='button white')
            )
        )

При размещении формы с ошибками, повторный рендеринг шаблона не показывает ошибки, даже если я могу напечатать form._errors в представлении и просмотреть список ошибок.

Если изменить helper.field_template на другое значение (или удалить его для установки по умолчанию) ошибки отображаются над каждым полем, - но я не получаю дисплей инлайн больше.

Как я могу использовать Джанго-хрустящих-форму, чтобы отобразить все ошибки этой формы в отдельном DIV, например?

2 ответы

1

Может быть, более простой способ это следующий, потому что она использует меньше импорта ...

.. в представлениях:

if request.method == 'POST':
    form = TheForm(request.POST)
    if form.is_valid():
        form.save()
        return redirect('url_name')
    else:
        form = TheForm()
    return render(request, 'form.html', {'form': form})

... и в форме вам нужно всего лишь:

{% load crispy_forms_tags %}
{% crispy form %}

... где « url_name » определяется имя шаблона в urlpatterns (urls.py) ... это все , что вам нужно на самом деле ...

Хрустящие очень умные системы. Система знает, как интуитивно может показать ошибки формы.

2

Мы используем django.contrib.messages протолкнуть общую строку ошибки, когда форма имеет ошибки проверки, и оставить ошибки поля в одиночку оказывать инлайн:

from django.contrib import messages
# ...
if not form.is_valid():
    messages.error(request, "Please correct the errors below and resubmit.")
    return render(request, template, context)

Затем мы используем бутстраповское оповещение, чтобы показать все сообщения, в то числе нашей общей ошибки, хотя вы могли бы, конечно, отметить его как бы вы хотели.

Но если все, что вам нужно сделать, это переместить ошибки в отдельный блок, добавьте их в контекст запроса:

from django.contrib import messages
# ...
if not form.is_valid():
    context['form_errors'] = form.errors
    return render(request, template, context)

и в шаблоне:

{% crispy form %}
<div id='form-errors'>{{ form_errors }}</div>

Затем вы можете поиграться с хелперами атрибутами формы хрустящей в и стилях для управления отображением ошибок инлайн.