Django查询:你能嵌套注释吗?

时间:2013-04-07 20:10:29

标签: django django-models

我有一个Django查询,我希望通过test_id对测试次数进行分组,并在每次测试中获得平均值。

test_attempts表记录用户在给定测试中进行的每次测试尝试。我想找到每次测试的平均尝试次数

以下是我的问题:

average = TestAttempts.objects.values('test_id').annotate(Avg(Count('test_id'))).filter(user_id=id)

我收到以下错误: 'Count'对象没有属性'split'

有没有办法处理这个问题而不必编写原始SQL?

更新: 这是TestAttemt模型

class TestAttempts(models.Model):
id = models.IntegerField(primary_key=True)
user_id = models.IntegerField()
test_id = models.IntegerField()
test_grade = models.DecimalField(max_digits=6, decimal_places=1)
grade_date_time = models.DateTimeField()
start_time = models.DateTimeField()
seconds_taken = models.IntegerField()
taking_for_ce_credit = models.IntegerField()
ip_address = models.CharField(max_length=25L)
grade_points = models.DecimalField(null=True, max_digits=4, decimal_places=1, blank=True)
passing_percentage = models.IntegerField(null=True, blank=True)
passed = models.IntegerField()
class Meta:
    db_table = 'test_attempts'

1 个答案:

答案 0 :(得分:0)

您想要一个号码,即所有考试的平均尝试次数?你有测试模型吗?

这将适用于:

average = (Test.objects.filter(testattempt__user_id=id)
             .annotate(c=Count('testattempt'))
             .aggregate(a=Avg('c'))['a'])

如果您没有TestAttempt→测试关系,但只有test_id字段,那么工作:

average  = (TestAttempt.objects.filter(user_id=2)
                               .values('test_id')
                               .annotate(c=Count('pk'))
                               .aggregate(a=Avg('c')))

但在sqlite上对我没有用,而且我手头没有合适的数据库。