Ошибка "This field is required" для FormSet при запросе полезной нагрузки, но работает нормально с Form

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

Нужна помощь в решении этой проблемы. Если я передаю набор форм в html шаблон и запрашиваю его полезную нагрузку POST запросом, я получаю такую ошибку

Field Error: primary <ul class="errorlist"><li>This field is required.</li></ul> Field Error: symbol <ul class="errorlist"><li>This field is required.</li></ul> Field Error: secondary <ul class="errorlist"><li>This field is required.</li></ul>

Для набора форм, формы динамически добавляются или удаляются на странице, но при загрузке страницы на ней всегда будет одна форма. И для других динамически добавляемых форм, они также получают ту же ошибку. Но когда я передаю единственную форму в html-шаблон, я получаю полезную нагрузку POST просто отлично.

views.py

def advanced(request):

    form = formset_factory(Search)
    if request.method == 'POST':
        formset = Search(request.POST)
        for field in formset:
            print("Field Error:", field.name,  field.errors)
    return render(request,"advancedsearch.html", {"formset":form})
forms.py

indicator = [
    ('', ''),
    ('high', 'Estimated high'),
    ('low', 'Estimated low'),
    ('median', 'Estimated median'),
    ('realprice', 'Real Price'),
    ]

symbol= [
    ('', ''),
    ('>', 'higher than'),
    ('<', 'less than'),
    ('=', 'equal to'),
    ]


class Search(forms.Form):
    primary = forms.CharField(label='a', widget=forms.Select(choices=indicator))
    symbol =  forms.CharField(label='b', widget=forms.Select(choices=symbol))
    secondary = forms.CharField(label='c', widget=forms.Select(choices=indicator))
advancedsearch.html

<form method="POST" action="">{% csrf_token %}
  {% for x in formset %}
    <div class = "d-flex flex-row justify-content-center bd-highlight mb-5">
      {{ x.as_p }}
    </div>
  {% endfor %}    
  <button type="submit" class="btn btn-primary" >Search</button>
</form>
Form Data example
csrfmiddlewaretoken: Sc2bMfDJr2qQ9rqeOxd3YnVpB37d36ZkQ85OfGaUL7vD61IyGzNiVDn6c5vydKSX
form-0-primary: low
form-0-symbol: >
form-0-secondary: low

Для этого в голову пришли два способа.

  1. Переключите form.CharField на form.ChoiceField
# forms.py

...

class Search(forms.Form):
    primary = forms.CharField(label='a', widget=forms.Select(choices=indicator))
    symbol =  forms.CharField(label='b', widget=forms.Select(choices=symbol))
    secondary = forms.CharField(label='c', widget=forms.Select(choices=indicator))
  1. Поле формы, необходимое для False, проверьте этот вопрос
Вернуться на верх