我有两个模型:
class Member(models.Model):
course_member = models.ForeignKey(CourseMember, on_delete=models.CASCADE
class Meta:
db_table = 'member'
ordering = ['-id']
class CourseMember(models.Model):
name = models.CharField(max_length=30)
当我尝试运行以获取具有course_member的成员的计数时。
Member.objects.values('course_member').aggregate(Count('id'))
我一直收到错误的数据。似乎不是按照Course_member分组,而是按照member_id分组,而我用单独的结果进行查询。
Django文档警告此问题see link。
我试图查看是否有解决方案可以绕过此问题,而不仅仅是等待Django 3.1
答案 0 :(得分:1)
如果您要计算Member
s CourseMember
s的数量,建议您采用其他方法:
from django.db.models import Count
CourseMember.objects.annotate(
nmember=Count('member')
)
这将返回一组CourseMember
,但是每个CourseMember
都有一个额外的属性nmember
,用于存储相关Member
对象的数量。
您可以使用以下方法获取问题中的查询集:
Member.objects.values(
'course_member'
).annotate(
n=Count('id')
).order_by('course_member')
.order_by
在这里也很重要,因为否则,它实际上将无法正确地“分组”数据。
但是上面有两个潜在的问题:
CourseMember
的{{1}}个;和CourseMember
的字典,而不是QuerySet
中的QuerySet
那样的“丰富”,因为在CourseMember
s上,您可以定义各种额外的行为,属性等。