2016-06-01 6 views
0

У меня есть три модели, как, что:Ограничить одно поле формы в зависимости от значения другого поля

class SchoolClass(models.Model): 
    school = models.ForeignKey(School) 
    class_name = models.CharField(max_length=5) 

class School(models.Model): 
    name = models.CharField(max_length=100) 
    address = models.TextField(blank=True) 

class Student(models.Model): 
    school = models.OneToOneField(School, null=True) 
    class_id = models.ForeignKey(SchoolClass) 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 

создать Django форму для студента, есть ли способ настройки формы, чтобы показать только классы, которые находятся в школу, которую я выбрал?

ответ

0

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

Что-то вроде этого:

class NameOfForm(forms.Form)): 
    def __init__(self, *args, **kwargs): 
     current_student = kwargs.pop('student', None) 
     super(NameOfForm, self).__init__(*args, **kwargs) 
     classes_in_school = SchoolClass.objects.filter(school=current_student.school) 
     self.fields['name_of_field'] = ModelChoiceField(queryset = classes_in_school, 
                 required = True, 
                 label = "Choose a class") 

И тогда, на ваш взгляд, когда вы создаете форму, не забудьте пройти в текущем студента в качестве дополнительного аргумента. Что-то вроде этого:

form = NameOfForm(request.POST or None, student=request.student) 
Смежные вопросы