2016-06-01 36 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) 
相關問題