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) 방식으로 쿼리를 수행해야합니다.