Динамически фильтруйте поле ManyToMany, чтобы оно соответствовало выбору пользователя - PullRequest
0 голосов
/ 29 июня 2019

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

Я попробовал некоторые определения kwarg (сильно упрощенные / сокращенные) в форме. Я попробовал некоторые определения limit_choices_to в модели, но я просто не могу его получить. Я могу заставить его показывать только варианты, которые совпадают с жестко запрограммированным числом, но я не могу заставить его извлечь пользовательский ввод из формы и отфильтровать те курсы, которые не имеют отношения к делу.

models.py

class Course(models.Model):  
Course_Teacher = models.ManyToManyField(Teacher, blank=False)
Course_Title = models.CharField(max_length=150, null=False)  

class Student(models.Model):
Student_Last_Name = models.CharField(null=False, max_length=50)
Student_First_Name = models.CharField(null=False, max_length=50)
Course_Enrollment = models.ManyToManyField(Course, blank=True)  

class Teacher(models.Model):
Teacher_Last_Name = models.CharField(max_length=50, null=False)
Teacher_First_Name = models.CharField(max_length=50, null=False)  


class StudentModelForm(forms.ModelForm):
    class Meta:
        model = Student
        fields = 
            ['Student_Last_Name','Student_First_Name','Student_Grade', 
'Course_Enrollment']
        labels = {
        'Student_Last_Name': 'Student Last Name',
        'Student_First_Name': 'Student First Name',
        'Student_Grade':'Student Enrollment Grade',
        'Course_Enrollment': "Enroll Student ",

}

НА ОСНОВЕ ВХОДА ПОЛЬЗОВАТЕЛЯ в поле «Student_Grade» в StudentModelForm, я хотел бы, чтобы в поле «Course_Enrollment» автоматически отображались курсы только на двух уровнях обучения (два ниже и два выше) для оценки этого студента. Например, я не хочу, чтобы пользователю приходилось пролистывать сотни курсов детского сада для 9-го класса.

Заранее спасибо!

...