【发布时间】:2017-04-24 20:05:29
【问题描述】:
如何在 prefetch_related 查询期间注释相关模型?
我有两个模型:
class Subject(models.Model):
...
class Student(models.Model):
subjects = models.ManyToManyField(Subject, related_name="students")
我想在单个查询中检索 Subject 对象,与每个 Subject 相关的 Student 对象以及每个 Student 具有的数量。
我正在尝试使用以下查询来完成它:
Subject.objects.all().prefetch_related(
Prefetch("student", queryset=Student.objects.all().annotate(subjects_count=Count("subject")))
)
但是我得到一个 SQL 错误:
OperationalError at /concerts/coldplay-en-madrid/
(1055, "Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'studentsubject.subject_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by")
【问题讨论】:
-
尝试这样做:Subject.objects.annotate(subjects_count=Count('students')).prefetch_related('students')
-
这样我得到了每个科目有多少学生,但我想得到相反的关系:每个学生有多少科目。无论如何感谢您的帮助!
标签: mysql django django-orm