Форма с полем ModelChoiceField(required=True) не вызывает ошибку ValidationError, если ни один вариант не выбран

У меня есть форма, которая выдает ValidationErrors для всех полей, если они не действительны. Однако, если не выбран ни один вариант из ModelChoiceField, форма не отправляется (что нормально) и не вызывает никаких ValidationError в шаблоне

# Form

class PollersForm(forms.Form):

    # Poller Category
    poller_category = forms.ModelChoiceField(widget=forms.RadioSelect(attrs={
        'class': 'poller-category-radio',
    }), queryset=Category.objects.all().order_by('category'), label='Select a Category', required=True)

 [..|
# View

def raise_poller(request):

        # check whether it's valid:
        if form.is_valid():
            # process the remaining data in form.cleaned_data as required
            poller_text = form.cleaned_data['poller_text']
            poller_category = form.cleaned_data['poller_category']
            
# passes all the time even if no choice is selected

# Template

    <form action="/raisepoller/" method="post">
        {% csrf_token %}
        {{ form.non_field_errors }}
        {{ form.errors }}

[..]

        <!-- Poller Categories -->
        <div class="fieldWrapper">
            <div class="label">{{ form.poller_category.label_tag }}</div>
            <div class="category-ctn">
                {% for category in form.poller_category %}
                    <div class="category-wrapper">{{ category }}</div>
                {% endfor %}
            </div>
        </div>

        <!-- Submit Button -->
        <button type="submit" value="Publish Poller" id="raise-poller-button">
            <div class="button-wrapper">
                <div class="button-icon"><img id="button-image" src="{% static 'images/send.png' %}"></div>
                <div class="button-text">Publish Poller</div>
            </div>
        </button>
    </form>

required = true
проверяет только наличие чего-либо в поле
. этим
можете ли вы проверить в данных ответа, есть ли значение по умолчанию для этого поля?

Похоже, что if request.method == 'POST': возвращает False, если при отправке не выбрана категория.

Браузер даже не отправляет запрос, потому что проверка HTML5 не прошла.

Сообщение о проверке не отображается из-за visibility: hidden на input.

.category-wrapper input {
    position: fixed;
    visibility: hidden;
}

... что вызывает эту ошибку, показанную в консоли браузера:

❗Некорректный элемент управления формы с name='category' не фокусируется.

Вместо этого сделайте его прозрачным, без ширины и полей:

.category-wrapper input {
    margin: 0;
    opacity: 0;
    width: 0;
}

Это происходит потому, что представление проходит мимо первого if

if request.method == 'POST':

создайте форму

    # create a form instance and populate it with data from the request:
    form = PollersForm(request.POST)

тогда проверьте, является ли он действительным

    # check whether it's valid:
    if form.is_valid():

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

else:
    form = PollersForm()

return render(request, 'pollinator/raise_poller.html', {'form': form})

лучшее, что вы можете сделать, это вынести чистую форму request.method из else

form = PollersForm()

return render(request, 'pollinator/raise_poller.html', {'form': form})
Вернуться на верх