筛选外键下拉字段Django

筛选外键下拉字段Django,django,django-models,django-forms,django-views,Django,Django Models,Django Forms,Django Views,我有三张桌子,学生,K8分,老师和班级。学生表跟踪所有学生数据信息,您可以将其分配到教室,分数跟踪他们当天获得的分数,教室表是创建教室名称的地方。我想完成的是当您登录到/k8\u points\u教室/1时?页面中,有一个学生下拉字段。教室末尾的1是教室id。字段student_name应仅显示该特定班级的学生,如何筛选该字段?现在,它只是调出数据库中的每个学生。谢谢你的帮助 模型 形式 看法 您需要将类作为参数传递给视图中的表单,然后调整student_name字段的queryset以向下过滤

我有三张桌子,学生,K8分,老师和班级。学生表跟踪所有学生数据信息,您可以将其分配到教室,分数跟踪他们当天获得的分数,教室表是创建教室名称的地方。我想完成的是当您登录到/k8\u points\u教室/1时?页面中,有一个学生下拉字段。教室末尾的1是教室id。字段student_name应仅显示该特定班级的学生,如何筛选该字段?现在,它只是调出数据库中的每个学生。谢谢你的帮助

模型

形式

看法


您需要将类作为参数传递给视图中的表单,然后调整student_name字段的queryset以向下过滤到该类的学生

class K8PointsClassroomForm(forms.ModelForm):
    def __init__(self, *args, class_=None, **kwargs):
          super (K8Points_ClassroomForm,self).__init__(*args,**kwargs )
          self.fields['date'].disabled = True
          self.fields['day'].disabled = True
          self.fields['week_of'].disabled = True
          # Limit the fields queryset to that of the class's students.
          self.fields['student_name'].queryset = class_.student_set.all()
编辑:

以下是我试图解释的观点:

@login_required
def K8_Points_Classroom(request, classid):
    class_name = TeacherClass.objects.get(id=classid)
    form = K8Points_ClassroomForm(class_=class_name)

我很困惑,那么我是在视图中创建查询集并将其发布到forms.py吗?我刚刚发布了我的视图,以便您可以看到它。不,您将类实例传递到表单的构造函数中。我迷路了,您能不能帮我写出来让我看到它。
form=K8Points\u ClassroomForm(class\u=class\u instance)
这是可行的,但如果我硬编码了id,但无法获取id。
@login_required
def K8_Points_Classroom(request, classid):

    if request.method == "GET":

        date = datetime.date.today()
        students = Student.objects.filter(class_name=classid).order_by('student_name')
        class_name = TeacherClass.objects.get(id=classid)
        form = K8Points_ClassroomForm(classid = class_name.id)
        request.session['my_class_id'] = classid
        return render(request, 'points/k8_points_classroom.html', {'form': form, 'students': students, 'class_name': class_name, 'date': date , 'classid': classid})

class K8PointsClassroomForm(forms.ModelForm):
    def __init__(self, *args, class_=None, **kwargs):
          super (K8Points_ClassroomForm,self).__init__(*args,**kwargs )
          self.fields['date'].disabled = True
          self.fields['day'].disabled = True
          self.fields['week_of'].disabled = True
          # Limit the fields queryset to that of the class's students.
          self.fields['student_name'].queryset = class_.student_set.all()
@login_required
def K8_Points_Classroom(request, classid):
    class_name = TeacherClass.objects.get(id=classid)
    form = K8Points_ClassroomForm(class_=class_name)