Я столкнулся с той же проблемой и нашел ее в документации
https://docs.djangoproject.com/en/3.0/ref/forms/fields/#core -field-arguments
Виджеты обязательных полей формы имеют необходимые HTML атрибут. Установите для атрибута Form.use_required_attribute значение False, чтобы отключить его. Обязательный атрибут не включен в формы наборов форм, потому что проверка браузера может быть неправильной при добавлении и удалении наборов форм.
Если у вас есть пустая строка (для добавления дополнительной записи), тогда вы можете Не сохраняйте форму до тех пор, пока не будет заполнена пустая строка. Поэтому, если вы хотите сказать, обновить одну существующую строку, не добавляя дополнительную строку, то у вас есть проблема, вы не можете это сделать. Проблема действительно заключается в том факте, что набор форм действительно в терминах html только одна форма. Обходной путь для этой проблемы может заключаться в использовании javascript для добавления строк в набор форм только по мере необходимости, как в этом примере:
https://whoisnicoleharris.com/2015/01/06/implementing-django-formsets.html
Существует возможно, кроме того, javascript решение для проверки полей формы перед отправкой запроса, я думаю, что это может быть такое решение, но я не пробовал:
https://jqueryvalidation.org/required-method/
Было бы разумно, чтобы абсолютно пустая строка не проверялась для обязательных полей, а просто игнорировалась.
ОБНОВЛЕНИЕ: я получил простое решение, работающее на примере по ссылке выше. Мой шаблон выглядит следующим образом (обратите внимание, что вначале пустая строка не отображается благодаря оператору if):
{% extends "base_generic.html" %}
{% load static %}
{% block content %}
<h1>Experiment Detail</h1>
<form name="test_form" method="post">
{% csrf_token %}
{{ formset.management_form }}
{% for form in formset %}
{% if form.name.value %}
<div class="link-formset">
{{ form.name }}
</div>
{% endif %}
{% endfor %}
<input type="submit" value="Save" class="button"/>
</form>
<!-- Include formset plugin - including jQuery dependency -->
<!-- <script src="{% static 'path_to/jquery-3.4.1.js' %}"></script> -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="{% static 'js/jquery_formset.js' %}"></script>
<script>
$('.link-formset').formset({
addText: 'Add',
deleteText: 'Delete'
});
</script>
{% endblock %}
На мой взгляд, у меня есть это для l oop для установки use_required_attribute:
for form in formSet:
form.use_required_attribute = True
Решение работает нормально, когда я нажимаю кнопку «Добавить», появляется пустая строка, и пустое поле «имя» имеет ожидаемое красное поле вокруг пустого поля, и когда я пытаюсь нажать «Сохранить», я получаю сообщение » Пожалуйста, заполните это поле. '