Nano Hash - криптовалюты, майнинг, программирование

Django: ошибка проверки Crispy Forms в шаблоне

Я использую django-crispy-forms для красиво оформленных форм. Для одной из моих форм мне пришлось внести некоторые пользовательские настройки, и теперь мне интересно, как правильно проверять ошибки, которые не относятся к конкретному полю, а ко всей форме.

В частности, моя форма содержит дату начала и окончания:

# forms.py 
class PlotForm(forms.Form):
    start_date = forms.DateField(initial=last_month, widget=forms.widgets.DateInput(attrs={'type': 'date'}))
    end_date = forms.DateField(initial=datetime.date.today, widget=forms.widgets.DateInput(attrs={'type': 'date'}))

    def clean(self):
        cleaned_data = super().clean()
        start_date = cleaned_data.get('start_date')
        end_date = cleaned_data.get('end_date')
        if start_date > end_date:
            raise forms.ValidationError("Start date must not be before end date.")
        return start_date

Чтобы убедиться, что дата окончания не предшествует дате начала, я использую clean(self).

Однако ошибка никогда не отображается.

<form method="post">
        {% csrf_token %}
        <div class="row">
            <div class="col-6">
                {{ form.start_date|as_crispy_field }}
            </div>
            <div class="col-6">
                {{ form.end_date|as_crispy_field }}
            </div>
        </div>
        <button type="submit" class="btn btn-primary">Submit</button>
    </form>

Я могу исправить это, добавив {{ form.errors }}, но это выглядит очень некрасиво. Есть ли простой способ красиво отображать ошибки проверки, связанные с формой, с помощью crispy? Хорошо показаны ошибки, связанные с полем.


Ответы:


1

Вы можете использовать |as_crispy_errors шаблонные фильтры [readthedocs]:

<form method="post">
    {% csrf_token %}
    {{ form|as_crispy_errors }}
    <div class="row">
        <div class="col-6">
            {{ form.start_date|as_crispy_field }}
        </div>
        <div class="col-6">
            {{ form.end_date|as_crispy_field }}
        </div>
    </div>
    <button type="submit" class="btn btn-primary">Submit</button>
</form>

Этот фильтр шаблона будет:

Визуализирует только ошибки формы так же, как django-crispy-forms.

28.10.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..