在查询中使用查询的 Django 不起作用

Django using a Query in a Query does not work

所以我有这个模型:

class Student(models.Model):
    id = models.AutoField(primary_key=True)
    first_name=models.CharField(max_length=50)
    last_name=models.CharField(max_length=50)
    title=models.CharField(max_length=30,default="",blank=True)
    tel=models.CharField(max_length=50,default="",blank=True)
    e_mail=models.CharField(max_length=50,default="",blank=True)
    social_media=models.CharField(max_length=50,default="",blank=True)
    social_media2=models.CharField(max_length=50,default="",blank=True)
    social_media3=models.CharField(max_length=50,default="",blank=True)
    street=models.CharField(max_length=50)
    postal=models.CharField(max_length=50)
    city=models.CharField(max_length=50)
    country=models.CharField(max_length=50)
    graduation_uni=models.DateField(null=True,default=None,blank=True)
    graduation_ikomt=models.DateField(null=True,default=None,blank=True)
    certificate_no=models.CharField(max_length=50,default="",blank=True)

    def __str__(self):
        return str(self.id) + " - " +self.first_name + " " + self.last_name

class Course(models.Model):
id = models.AutoField(primary_key=True)
course=models.CharField(max_length=50)
description=models.CharField(max_length=50,null=True,default=None,blank=True)
start_date=models.DateField(null=True,default=None,blank=True)
end_date=models.DateField(null=True,default=None,blank=True)


def __str__(self):
    return str(self.id) + " - " +self.course + " | " + self.start_date.strftime("%d.%m.%y") + " - " + self.end_date.strftime("%d.%m.%y")

class StudentInCourse(models.Model):
    StudentId = models.ForeignKey(Student, on_delete=models.CASCADE)
    CourseId = models.ForeignKey(Course, on_delete=models.CASCADE)

    def __str__(self):
        return str(Student.objects.get(id=self.StudentId.id)) + " in " + str(Course.objects.get(id=self.CourseId.id))

而且我想使用这样的查询(在我的 views.py 中)仅显示特定课程中的学生:

students_in_course=StudentInCourse.objects.filter(CourseId=id)
 latest_student_list = Student.objects.filter(id__in=students_in_course)

遗憾的是,我只得到一个空结果。任何想法我做错了什么?我认为 Primary/Foreign 关键关系过滤器应该以这种方式工作?

如有任何建议,我们将不胜感激。

问候

您尝试以这样的方式进行过滤,即检索 Student 个“发生”的主键与 [=11] 的主键相同=]对象,这个意义不大。

您可以过滤:

latest_student_list = Student.objects.filter(<strong>studentincourse__CourseId=id</strong>)

或者如果你想使用两个 QuerySets(看起来不太优雅),你可以使用:

students_in_course=StudentInCourse.objects.filter(CourseId=id)<strong>.values('StudentId')</strong>
latest_student_list = Student.objects.filter(id__in=students_in_course)

Note: Normally one does not add a suffix Id to a ForeignKey field, since Django will automatically add a "twin" field with an _id suffix. Therefore it should be course, instead of CourseId.