2012-12-11 4 views
0

나는 다음과 같은 모델이에서 :주석 SQLite는

class Model(...): 
    date = DateField() 
    user = ForeignKey() 
    data = ForeignKey() 
    time = IntegerField() 

내가 하나의 데이터에 대한 모든 사용자에 대해 시간 필드의 합계를하고 싶습니다를, 그래서 내가 할 :

Model.objects.filter(date=..., data=...).values('user_id').annotate(time=Sum('time')) 

하지만 결과는 다음과 같습니다 :

[{ 'user_id': 1, 'time': 20}, { 'user_id': 1, 'time': 10}, { 'user_id': 2, 'time' 20}]

따라서 그룹화가 작동하지 않습니다. 내가 django에 의해 생성 된 쿼리를 확인하고 왜 django뿐만 아니라 사용자뿐만 아니라 그룹화에 대한 날짜와 데이터를 사용할지 모르겠다. 내가 잘못했거나 SQLite 문제 일 뿐이니?

답변

5

기본 모델 주문을 지우려면 .order_by()을 검색어에 추가해야합니다. 코드에 대한

는 :

(Model.objects.filter(date=…, data=…) 
       .values('user_id') 
       .annotate(time=Sum('time')) 
       .order_by())      # <---- Here 

이 전체는 default ordering doc warning에 설명되어 있습니다 :

"이름으로 기본 순서는 도 역할을 할 것이다 꽤 일을하지 않습니다 것을 제외하고. 그룹화에서 ... 쿼리의 순서를 지워야합니다. "

+0

49 초 : – szaman

+1

당신을 도울 수있어서 기쁩니다. – danihp

+0

훌륭한 답변이지만이 포장을 어디에서 가져 왔습니까? –