Django Form Disabled Select Option Values Not Submitted Even When They are Enabled with JavaScript Before Submission

В моем HTML отображается около 20 или более форм через modelformset_factory и каждая из них имеет предварительно выбранное имя сотрудника (поэтому оно отключено в forms.py). Имя сотрудника является первичным ключом в модели Staff, поэтому я не хочу, чтобы все имена сотрудников были доступны для выбора. У вошедшего пользователя есть несколько назначенных сотрудников, поэтому от него требуется ввести только номер телефона и адрес. Отключенные поля включаются с помощью Javascript перед отправкой формы, но я все равно получаю ошибку {'staff_name': ['This field is required.']} при отправке формы.

Вот мои коды:

forms.py

class StaffForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['staff_name'].disabled = True

views.py

class StaffModelFormSet(BaseModelFormSet):
    def clean(self):
        super().clean()
        print(self.errors)

class StaffEntryView(LoginRequiredMixin, FormView):
    def post(self, request, *args, **kwargs):
        StaffFormSet = modelformset_factory(Staff, form=StaffForm, formset=StaffModelFormSet)
        submitted_form = StaffFormSet(request.POST)
    
        if submitted_form.is_valid():
            self.form_valid(submitted_form)
            print("This form is valid, Sir!")
        else:
            self.form_invalid(submitted_form)
            print("This is not a valid form.")

template.html

<form method="post" class="form-control" id="staff_form" name="staff-form" onsubmit="enablePath();">
<!-- form details goes here -->
<tbody>
   {% for form in formset %}
    <tr class="table-striped">
      <td>{{ form.staff_name }}</td>
      <td>{{ form.phone }}</td>
      <td>{{ form.address }}</td>
    </tr>
   {% endfor %}
</tbody>

script.js

function enablePath(e) {
var options = document.getElementsByTagName('select');
for (var i=0, iLen=options.length; i<iLen; i++) {
    options[i].disabled = false;
}
Вернуться на верх