Django использование запроса в запросе не работает

Итак, у меня есть эта модель :

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 Key фильтр должен работать именно так?

Любой совет будет оценен по достоинству.

Приветствую

Вы пытаетесь фильтровать таким образом, чтобы получить Student, которые "happen" имеют тот же первичный ключ, что и первичный ключ объекта StudentInCourse, это не имеет особого смысла.

Вы можете фильтровать с помощью:

latest_student_list = Student.objects.filter(studentincourse__CourseId=id)

или если вы хотите работать с двумя QuerySet (что выглядит менее элегантно), вы можете работать с:

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

Примечание: Обычно не добавляют суффикс Id к полю ForeignKey, так как Django автоматически добавит поле-"близнец" с суффиксом _id. Поэтому он должен быть course, вместо CourseId.

.
Вернуться на верх