2013-04-07 5 views
0

나는 test_id로 테스트 시도 횟수를 그룹화하고 각 테스트 중에서 평균을 얻고 싶은 장고 쿼리를 가지고있다.장고 쿼리 : 주석을 중첩 할 수 있습니까?

test_attempts 테이블은 사용자가 주어진 테스트에서 수행하는 각 테스트 시도를 기록합니다.

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

나는 다음과 같은 오류가 오전 : '백작'개체가 어떤 속성이없는 '분할'

내가 여기

테스트

당 시도의 평균 수를 찾으려면 나의 쿼리입니다

원시 SQL을 작성하지 않고도이 문제를 처리 할 수 ​​있습니까?

UPDATE : 여기 당신은 하나의 숫자, 모든 테스트를 통해 시도의 평균 수를 원하는 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' 

답변

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, 그리고 나는 적절한 데이터베이스를 가지고 있지 않습니다.

+0

정확히 내가 뭘 찾고 있었는지, 다시 한번 당신의 도움에 감사드립니다. 운이없는 문서를 보면서 많은 시간을 보냈습니다. – xXPhenom22Xx

+0

TestAttempt 테이블에는 테스트 테이블과의 관계가 없습니다. 두 번째 옵션을 사용하려고 할 때 먼저 test_id에 의해 그룹화 된 것처럼 보이고 그 다음에는 SQL 오류가 발생합니다. (1064, "SQL 구문에 오류가있어서 MySQL 서버 버전에 해당하는 설명서에서 올바른 구문을 확인하여 'FROM (SELECT'test_attempts'.test_id' AS'test_id', COUNT 'test_attempts'.'id') 'at line 1 ") – xXPhenom22Xx

+0

이것은 장고의 버그처럼 느껴진다. (당신의 질문에 당신의 모델을 넣을 수 있습니까? –

관련 문제