Поле ModelChoiceField в ModelFormSet не выбирает начальное значение при использовании пользовательской ModelForm

Я использую ModelFormSet для отображения списка форм на основе предопределенной ModelForm. Мне нужно настроить два поля в формах, и поэтому я создал эту ModelForm:

# forms.py

class StudentRelationshipForm(forms.ModelForm):

    # the row below causes the issue:
    classroom = forms.ModelChoiceField(queryset=Classroom.objects.all(), widget=forms.Select(attrs={'class':'form-control border-0 bg-white text-black h5'}), to_field_name='clarsroom_name', disabled=True, required=True)

    student_type = forms.ChoiceField(choices=StudentRelatuionship.STUDENT_TYPES, widget=forms.Select(attrs={'class': 'form-control'}), required=True)
    class Meta:
        model = StudentRelatuionship
        fields = [
            'classroom',
            'student_type',
        ]

Я создаю ModelFormSet в следующем представлении:

# views.py

....

class MyView(DetailView):

     def get_context_data(self, **kwargs):

             classroom_list = [ a list of classrooms goes here ]
             initial_formset_data = []
             for classroom in related_companies:
                 initial_formset_data.append({'classroom': classroom.pk})

             StudentRelationshipFormSet = modelformset_factory(StudenrRelatuionship, form=StudentRelatuionshipForm, fields=['classroom', 'student_type'], extra=formset_extras)
             context['investor_relationships_formset'] = StudentRelationshipFormSet(queryset=StudentRelatuionship.objects.filter(student=self.request.user.user_profile, classroom__in=classroom_list), initial=initial_formset_data)

....

По сути, проблема, с которой я столкнулся, заключается в том, что когда я указываю поле classroom в StudentRelationshipForm в forms.py, значение по умолчанию виджета HTML Select становится ---------. Однако, если я удалю строку из forms.py, виджет HTML select корректно выбирает название класса из базы данных при редактировании существующего экземпляра

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

P.S.: Мне нужно, чтобы disabled=True была в форме, а не в шаблоне, потому что disabled=True не позволяет пользователю отправить ввод, отличный от первоначального, даже если он изменит источник HTML.

Мне удалось решить проблему, указав атрибуты поля в __init__ из Form:


class StudentRelationshipForm(forms.ModelForm):

...

    def __init__(self, *args, **kwargs):
        super(StudentRelationshipForm, self).__init__(*args, **kwargs)
        self.fields['classroom'].disabled = True
        self.fields['classroom'].required = True
Вернуться на верх