【问题标题】:Django using a Query in a Query does not workDjango 在 Query 中使用 Query 不起作用
【发布时间】:2021-12-28 14:08:37
【问题描述】:

所以我有这个模型:

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)

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

我们将不胜感激。

问候

【问题讨论】:

    标签: django django-models django-views


    【解决方案1】:

    您尝试以这样的方式进行过滤,即您检索到“发生”的Students 具有与StudentInCourse 对象的主键相同的主键,这并没有多大意义感觉。

    您可以使用以下方式过滤:

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

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

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

    注意:通常不会在 ForeignKey 字段中添加后缀 Id,因为 Django 将自动添加一个带有_id 后缀的“孪生”字段。因此应该 是course,而不是CourseId

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-29
      • 2016-12-17
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 2016-04-17
      • 2018-03-20
      • 1970-01-01
      相关资源
      最近更新 更多