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