django count 具有相同相关记录的记录数
Posted
技术标签:
【中文标题】django count 具有相同相关记录的记录数【英文标题】:django count number of records with the same related record 【发布时间】:2013-11-25 10:57:44 【问题描述】:我正在使用 django 1.5.5 和 mysql
我有这个模型
class Student(models.Model):
username = models.CharField(max_length=200,unique = True)
class Score(models.Model)
student = models.ForeignKey(Student)
date = models.DateTimeField()
score = models.IntegerField()
我想获取所有分数为 0 的记录,并且同一学生还有另一个 0。
我尝试过的:
scores = Score.objects.annotate(score_count = Count('student__id')).filter(score = 0 , score_count__gt = 1)
我尝试过的另一件事是我认为确实可以满足我的需求,但需要 2 个查询。
students = Score.objects.filter(score = 0).values('student__id').annotate(c=Count('student__id')).filter(c__gt=1).values_list('student__id',flat=True)
score = Score.objects.filter(score = 0 , student__id__in = students)
有什么方法可以在一个查询中完成吗?
【问题讨论】:
Score.objects.values('student__id').filter(score=0).annotate(c=Count('score')).filter(c__gt=1)
??
@AamirAdnan 这只会给我值而不是分数记录。
【参考方案1】:
no_of_records = len(Score.objects.values('student__id').filter(score=0).annotate(c=Count('score')).filter(c__gt=1))
或
no_of_records = len(Score.objects.values('student__id').filter(score=0).annotate(c=Count('score')).filter(c__gt=1)).count()
【讨论】:
以上是关于django count 具有相同相关记录的记录数的主要内容,如果未能解决你的问题,请参考以下文章
MySQL Execution Plan--COUNT相关测试