我有一个创建课程的教师模型。我有另一种学生参加课程,但没有创建课程。我也有班级模型。我想要做的是让学生搜索课程并点击结果并将其添加到他们所参与的课程中。我有搜索工作,但我不能让第二部分工作。
我的学生模型是ManyToManyField,因为我认为Classe应该有一个以上的学生,学生可以参加多个Classe。出于某种原因,在管理员中,只要添加学生,就会让他们自动参与所有创建的课程。在寻找这样的课程之后,我试图让学生只参加他们选择的课程。
我的学生模特:
class Student(User):
classe = models.ManyToManyField(Classe)
school_name = models.CharField(max_length=250)
我的观点:
def add_course(request, classe_id):
#c = Classe.objects.get(pk=classe_id)
request.user.classe = classe_id
request.user.save()
return
我是否应该将Classe定义为与学生定义ManyToMany关系的人? 此外,由于我与学生有很多关系,我可以根据学生过滤课程对象,但是当我这样做时,什么都没有出现。
感谢。
答案 0 :(得分:1)
我认为您只是误解了管理员中多选字段的UI。它总是显示所有选项;但实际为该用户选择的那些将显示为突出显示。当然,默认情况下,不会选择任何选项,但您可以单击它们来添加它们。
您可能会发现在该字段中使用filter_horizontal
选项会更好,这会让UI更加清晰。
class StudentAdmin(admin.ModelAdmin):
model = Student
filter_horizontal = ('classe',)
其次,要在视图中为用户添加课程,您需要使用.add()
:
request.user.classe.add(classe_id)
执行此操作后,您无需致电save()
。