Модель Django с несколькими внешними ключами слишком долго загружается с помощью forms.ModelChoiceField

У меня есть проект django для оценок студентов.

Models.py

class Registration(CMTracking):
student = models.ForeignKey(Student, on_delete=models.CASCADE)
academic_year = models.ForeignKey(AcademicYear, on_delete=models.CASCADE)
school = models.ForeignKey(School, on_delete=models.CASCADE)
grade = models.CharField(max_length=5, choices=Grade.choices)
school_class = models.ForeignKey(SchoolGradeClass, on_delete=models.CASCADE, blank=True, null=True)
last_year_result = models.PositiveSmallIntegerField(choices=RESULT.choices, blank=True, null=True)
last_grade = models.CharField(max_length=5, choices=Grade.choices, null=True)
date_of_join = models.DateField(null=True, blank=True)
type_of_registration = models.PositiveSmallIntegerField(choices=TypeOfRegistration.choices, default=0, null=True)
type_of_attendance = models.PositiveSmallIntegerField(choices=TypeOfAttendance.choices, null=True)
transfer_from = models.PositiveSmallIntegerField(choices=TransferFrom.choices, blank=True, default=1)
status = models.PositiveSmallIntegerField(choices=RequestStatus.choices, default=0)


class Exam(CMTracking):
    fa_name = models.CharField(max_length=70, null=False)
    en_name = models.CharField(max_length=70, null=False)
    ar_name = models.CharField(max_length=70, null=False)
    total_mark = models.DecimalField(max_digits=5, decimal_places=2, default=0)
    exam_type = models.PositiveSmallIntegerField(choices=ExamType.choices)
    academic_year = models.ForeignKey(AcademicYear, on_delete=models.CASCADE)

    class ExamSubject(CMTracking):
        exam = models.ForeignKey(to=Exam, on_delete=models.CASCADE)
    subject = models.ForeignKey(to=SubjectMaster, on_delete=models.CASCADE)
    teacher = models.ForeignKey(Staff, related_name='ExamSubjectList', on_delete=models.CASCADE)  # Namavar
    school_class = models.ForeignKey(SchoolGradeClass, on_delete=models.CASCADE, blank=True, null=True)
    min = models.PositiveSmallIntegerField(null=True)
    max = models.PositiveSmallIntegerField(null=True)

    
    class MarkDescriptive(CMTracking):
    subject = models.ForeignKey(ExamSubject, on_delete=models.CASCADE)
    student = models.ForeignKey(Registration, related_name='mark_list_descriptive', on_delete=models.CASCADE)
    goal = models.ForeignKey(to=SubjectGoalsMaster, on_delete=models.CASCADE)
    point = models.FloatField(null=True, blank=True)
    t2point = models.FloatField(null=True, blank=True)

forms.py:

class MarkDescriptiveModelForm2(forms.ModelForm):
student = forms.ModelChoiceField(queryset=Registration.objects.all().select_related('student__person').filter(school_id=106), required=False)
# student = forms.IntegerField()    # only shows the id 

goal = forms.ModelChoiceField(queryset=SubjectGoalsMaster.objects.all(), required=False)
point = forms.ChoiceField(choices=DescriptivePoint5.choices)
 t2point = forms.ChoiceField(choices=DescriptivePoint5.choices)

class Meta:
    model = MarkDescriptive
    fields = ['id', 'student', 'point', 't2point']

Views.py:

    @login_required()
@require_http_methods(['POST', 'GET', 'PUT'])
def mark_descriptive_update(request, exam_subject_id=None, goal_id=None):
    subject = get_object_or_404(ExamSubject, id=exam_subject_id)
    goal = get_object_or_404(SubjectGoalsMaster, id=goal_id)
    MarkFormset = modelformset_factory(MarkDescriptive, form=MarkDescriptiveModelForm2, extra=0)
    marks = subject.markdescriptive_set.all().select_related('subject__exam') \
        .select_related('student__academic_year') \
        .select_related('student__student__person') \
        .select_related('goal').select_related('subject__subject').filter(goal=goal)
    formset = MarkFormset(request.POST or None, queryset=marks)

    add_url = reverse('add-class')
    template = 'school/loaders/load_form.html'
    form_template = 'school/pages/exam/mark_descriptive/formset.html'
    context = {
        # 'form': form,
        'records': marks,
        'subject': subject,
        'goal': goal,
        'formset': formset,
        'template': template, 'form_template': form_template, 'add_url': add_url}
    # if request.method == 'PUT':
    if request.method == 'POST':
        print(f'\n\n\nrequest is {request.method}\n')
        print(f'formset data:{formset.data}')
        if formset.is_valid():

            print('formset is valid')
            for form in formset:
                updated_mark = form.save(commit=False)
                updated_mark.subject = subject
                updated_mark.goal = goal
                updated_mark.modified_by = request.user
                updated_mark.last_modified = datetime.now()

                updated_mark.save()
                print('*** \n Marks added succefully !\n***')
        else:
            print(' form not valid', formset.errors)

    return render(request, form_template, context)

выпуск ::

student = forms.ModelChoiceField(queryset=Registration.objects.all().select_related('student__person').filter(school_id=106), required=False)

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

Вернуться на верх