Django ModelForm не получает данные экземпляра

У меня есть модель формы с несколькими полями выбора. Использую AJAX для обновления полей выбора формы при изменении поля.

Модель:

class Student(models.Model):
    CLASSROOM = 0
    GROUPROOM = 1
    HOMEROOM = 3
    STUDENT_RECORD_TYPES = [
        (CLASSROOM,_("Classroom")),
        (GROUPROOM,_("Group")),
        (HOMEROOM,_("Home Edu")),
    ]
    school = models.ForeignKey(School,on_delete=models.CASCADE,blank=False,related_name='student_records')
    grade = models.ForeignKey(Grade,on_delete=models.CASCADE,blank=False,related_name="student_records")
    record_type = models.PositiveSmallIntegerField(_("Record Type"),choices=STUDENT_RECORD_TYPES,default=0)

    class Meta:
        constraints = [
            models.UniqueConstraint(
                fields=['school','grade', 'record_type'],
                name='unique_school_grade_record'
            ),
        ]

    def __str__(self):
        return "Record ID: {}".format(self.pk) 

Views.py:

.
def update_students(request,pk):
    updated_table=None
    student_record = get_object_or_404(Student,pk=pk)
    if request.POST:
        form = StudentForm(request.POST or None,instance=student_record)
        if form.is_valid():
            form.save()
            messages.success(request,_("Student record Updated Successfully!"))
            #Getting data for view
            updated_table = update_students_table(request)
        else:
            messages.error(request,_("Invalid Input, Please check!"))
    else:
        form = StudentForm(request.GET or None,instance=student_record)
    context = {}
    # load form template
    context['form'] = form
    form_template_path = "components/forms/student_update.html"
    html_form = loader.render_to_string(form_template_path, context, request)
    context['form'] = html_form
    return JsonResponse(context)

Forms.py:

.
class StudentForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(StudentForm, self).__init__(*args, **kwargs)
        for visible in self.visible_fields():
            visible.field.widget.attrs['class'] = 'form-control'
        self.fields['school'].widget.attrs['class'] += ' select2'
        
        #the issue stands here
        #self.data.get('school') returns none even if its exist in form data
        if self.data.get('school'):
            self.fields['grade'].queryset = Grade.objects.filter(school=self.data.get('school'))
        else:
            self.fields['grade'].queryset = Grade.objects.none()

    class Meta:
        model = Student
        fields = '__all__'

the strange behavior drives me crazy because when I reselect the school it updates the grade choices normally (with no option selected!), but when I open edit instance form the data is there but grade field have no options in it!

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