gpt4 book ai didi

django-models - Django 模型 - 在 M2M 场景中使用 QuerySet 在两个 FK 上自连接

转载 作者:行者123 更新时间:2023-12-04 06:02:29 24 4
gpt4 key购买 nike

让我们看看下面的 M2M 场景。

我想得到任何给定学生的所有同事,以及他们都参加的类(class)数量。 (表示给定学生与他的每个同事有多少类(class)是相同的。)

class Student(models.Model):
pass

class Course(models.Model):
students = models.ManyToManyField(Student, through='Attendance')

class Attendance(models.Model):
student = models.ForeignKey(Student)
course = models.ForeignKey(Course)

查询看起来像这样
SELECT 
S.id AS student_id,
A2.student_id AS colleague_id,
COUNT(A2.course_id) AS number_of_courses_both_of_them_attend
FROM student S
JOIN attendance A1
ON S.id = A1.student_id
JOIN attendance A2
ON (A1.course_id = A2.course_id AND A1.student_id != A2.student_id)
GROUP BY 1, 2

我将不胜感激有关如何使用 QuerySet 方法完成此任务的任何提示。

谢谢!

最佳答案

colleagues = Student.objects.filter(course_set__students=your_student).exclude(id=your_student).distinct()

为每个学生添加 courses_cnt 属性:
colleagues = colleagues.annotate(courses_cnt = Count('attendance_set'))

关于django-models - Django 模型 - 在 M2M 场景中使用 QuerySet 在两个 FK 上自连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1151112/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com