2013-06-12 1 views
2

Python 3 & Django 1.5.1.Django 주석을 달지 않는다. 값을 추가하지 않으면()

날짜별로 사람을 그룹화하는 QuerySet 개체를 가져오고 싶습니다. ForeignKey에서 날짜가 추출되므로 쿼리에 values()을 사용하면 날짜가 반환되지 않고 실제 키 인 id # 만 반환됩니다. values ​​()를 사용하지 않으면 쿼리가 그룹화되지 않습니다. 자, 그것을 이해, annotate(), 쿼리 QuerySet 물건을 그룹화하는 방법입니다.

values()을 사용하지 않고 "그룹화"할 수있는 방법이 있습니까?

나는 values()을 사용하는 것에 신경 쓰지 않지만, 날짜를 얻기 위해 여분의 쿼리 (따라서 서버에 더 많은 오버 헤드)를 사용해야합니다.

모델 -

Name | Days Worked | Hours | Last Worked 
----------------------------------------- 
Dan |  4  | 30:00 | 2013-06-10 
Ted |  3  | 22:00 | 2013-06-09 
Bill |  2  | 16:00 | 2013-06-11 
----------------------------------------- 

하지만 점점있어 가장의 외래 키 표시하고 - -

ww = Worker.objects.filter(eid__day__year=year,eid__day__month=month 
          ).values('name','job_title').annotate(
           whours=Sum('hours'), 
           wcount=Count('name'), 
           recent=Max('eid'),).order_by(
           '-wcount','-recent','hours','name') 

Name | Days Worked | Hours | Last Worked 
----------------------------------------- 
Dan |  4  | 30:00 |  5 
Ted |  3  | 22:00 |  2 
Bill |  2  | 16:00 |  8 
----------------------------------------- 
을 내가 표시 할 무엇

class Event(models.Model): 
    day = models.DateField() 
    blah = models.TextField() 

class Worker(models.Model): 
    eid = models.ForeignKey('Events') 
    name = models.CharField(max_length=50) 
    hours = models.TimeField() 
    job_title = models.CharField(max_length=20) 

, 그래서처럼 보인다

또는 날짜 받기 & 그룹화하지 않음 난 그냥 개체를 얻을 때 -

ww = Worker.objects.filter(eid__day__year=year,eid__day__month=month 
          ).annotate(
           whours=Sum('hours'), 
           wcount=Count('name'), 
           recent=Max('eid'),).order_by(
           '-wcount','-recent','hours','name') 

Name | Days Worked | Hours | Last Worked 
----------------------------------------- 
Ted |  1  | 08:00 | 2013-06-07 
Dan |  1  | 08:00 | 2013-06-10 
Ted |  1  | 04:00 | 2013-06-03 
Dan |  1  | 08:00 | 2013-06-06 
Bill |  1  | 08:00 | 2013-06-09 
Ted |  1  | 10:00 | 2013-06-01 
Dan |  1  | 06:00 | 2013-06-02 
Dan |  1  | 08:00 | 2013-06-04 
Bill |  1  | 08:00 | 2013-06-11 
----------------------------------------- 

내가 일반 값 및 추가 쿼리의 사용을 시작하지 않고, 그룹에 방법이 있어야이 같은데요,하지만 난 방법을 이해하고 있지 않다 그것을하기 위해. 이것은 평범한 MySQL에서는 쉽게 할 수 있지만 PostgreSQL과 MySQL에서이 작업을해야하므로 장고 (Django) 방식으로 쿼리를 수행해야합니다.

답변

0

마지막으로 알아 냈습니다. 방금 recent 값에 __day을 추가해야했습니다. 미래 refence를 들어

ww = Worker.objects.filter(eid__day__year=year,eid__day__month=month 
         ).values('name','job_title').annotate(
          whours=Sum('hours'), 
          wcount=Count('name'), 
          recent=Max('eid__day'),).order_by(
          '-wcount','-recent','hours','name') 

, 사람이 장고 1.5.1에 ​​(나중에 알고있는 get_ & _display)이 들어하지 않는 것 일 모델의 choices 튜플의 사람이 읽을 수있는 부분을 잡아 필요 않다면.

관련 문제