Первоначально установите другое значение внешнего ключа во встроенном наборе форм django

Я пытаюсь создать систему управления результатами с помощью django. А для хранения оценок субъектов я использую встроенный набор форм django. Проблема в том, что пользователь должен вручную выбрать тему из раскрывающегося списка, который является Select Field в django, и я думаю, что это будет не лучший выбор. Поэтому я решил изначально установить SelectField для этого иностранного поля. Но начальное значение всегда устанавливается на последний объект модели Subject.

def subject_mark_create(request, grade_pk, exam_pk):
    subjects =  Subject.objects.get_by_grade(grade_pk).order_by('name')
    SubjectMarkFormset = inlineformset_factory(Exam, SubjectMark,  extra=subjects.count(), max_num=subjects.count(), fk_name='exam', form=SubjectMarkForm, can_delete=False)
    exam = get_object_or_404(Exam, pk=exam_pk)
    if request.method == "GET":
        formset = SubjectMarkFormset(instance=exam)
        for form in formset:
            for subject in subjects:
                form['subject'].initial = subject

Мой текущий набор встроенных форм

Как я хотел, чтобы мой набор форм выглядел так


person Muskan Bartaula    schedule 13.03.2020    source источник


Ответы (1)


Приведенный ниже код поможет вам сохранить начальное значение предметного поля формы для предметного объекта.

def subject_mark_create(request, grade_pk, exam_pk):
    subjects =  Subject.objects.get_by_grade(grade_pk).order_by('name')
    SubjectMarkFormset = inlineformset_factory(Exam, SubjectMark,  extra=subjects.count(), max_num=subjects.count(), fk_name='exam', form=SubjectMarkForm, can_delete=False)
    exam = get_object_or_404(Exam, pk=exam_pk)
    if request.method == "GET":
        formset = SubjectMarkFormset(instance=exam)
        for index, form in enumerate(formset):
            form['subject'].initial = subjects[index]
person danish_wani    schedule 13.03.2020
comment
Нет, я хочу, чтобы каждое поле формы предмета было уникальным. - person Muskan Bartaula; 13.03.2020
comment
В этом случае у вас должно быть количество субъектных объектов больше или равно количеству форм, которые вы пытаетесь использовать. Смотрите мой обновленный ответ - person danish_wani; 14.03.2020
comment
Большое спасибо. Я действительно много работал над этим решением последние 3 недели, и я действительно получил решение, которое я ожидал. Большое спасибо датскому Вани :) - person Muskan Bartaula; 14.03.2020