将模型对象传递给django中的选项字段

时间:2017-03-16 03:27:50

标签: python django many-to-many

我有一个名为Student的模型,它与名为Courses的模型有很多关系。我有另一个名为Attend的模型,其中我想要获得学生正在学习的所有课程,并将其作为包含学生正在学习的课程的选择菜单传递。我试图使用外键"学生"然后获得属于该学生的课程并将其列入一个列表并将其传递给选择但它显然不起作用。我想知道如何让属于学生的课程出现在选择菜单中。

这是我的模特。

class Attend(models.Model):
    student = models.ForeignKey(Student, on_delete=models.CASCADE, default="")
    time_signed_in = models.DateTimeField(auto_now_add=True)
    isSignedIn = models.BooleanField(default=False)
    # Below does not work, I get an error 'ForeignKey' object has no attribute 'id'

    #courses = User.objects.get(id=student.id).courses
    course = models.ForeignKey(Course, on_delete=models.CASCADE) 

1 个答案:

答案 0 :(得分:0)

要呈现学生正在学习的课程,您应该尝试使用django forms

如果我理解正确,您需要一个使用ModelMultipleChoiceField的表单:

  

允许选择适合的一个或多个模型对象   表示多对多关系。

class AttendForm(forms.Form):
    courses = forms.ModelMultipleChoiceField(queryset=Courses.objects.filter(student__id=id))

该示例仅用于向用户显示数据然后检索其选择。这种情况略有不同,使用的是ModelForm

  

每个ModelForm也有一个save()方法。此方法从绑定到表单的数据创建并保存数据库对象。

ModelForm是一个“数据库驱动”的表单,您可以在其中轻松执行涉及对数据库的调用的许多任务。

注意:我在示例中使用的查询集只是一个示例,您不必以这种方式使用它。