2009-07-19 114 views
3

讓我們來看看下面的M2M場景。Django模型 - 使用QuerySet在M2M場景中自動加入FK

我想讓所有給定學生的所有同事以及他們兩人蔘加的課程數量。 (意思是給定的學生有多少課程,在共同與每任何同事。)

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方法完成此操作。

謝謝!

+0

這(http://code.djangoproject.com/ticket/8375)會解決我的問題。不幸的是它處於Someday/Maybe狀態。 – ducu 2009-07-20 06:02:09

回答

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

courses_cnt屬性添加到每個學生:

colleagues = colleagues.annotate(courses_cnt = Count('attendance_set'))