2012-05-03 5 views
0

Я пытаюсь считать объекты, которые соответствуют критерию и группе, характеристикой связанного объекта. Например, если у меня есть множество моделей, как это:Агрегация фильтрованных связанных объектов

class Office(User): 
    name = models.CharField(max_length=50) 
    city = models.CharField(max_length=50) 

class Staff(User): 
    home_office = models.ForeignKey(Office) 

class Appointment(models.Model): 
    appt_start = models.DateTimeField() 
    appt_end = models.DateTimeField() 
    client = models.ForeignKey(User) 
    provider = models.ForeignKey(Staff) 
    result = models.CharField(max_length=50) 

И я хотел, чтобы получить число назначений, которые привели к «успеху» для каждого офиса, я мог бы сделать один необработанный SQL запрос следующим образом:

SELECT office.name, COUNT(appointment.id) 
    FROM appointment 
     JOIN staff ON staff.id = appointment.provider_id 
     JOIN office ON office.id = staff.home_office_id 
    WHERE appointment.result = 'success' GROUP BY office.name; 

Я бы предпочел, чтобы получить этот результат, используя ОРМ и QuerySet агрегации & аннотаций функции Джанго, если это возможно, но после прочтения документации, и я не думаю, что это можно агрегировать на основе полей соответствующего объекта, но Я хотел спросить, если бы я что-то пропустил.

ответ

0

Как об этом:

Office.objects.filter(
    staff__appointment__result='success' 
).values('name').annotate(appointments=models.Count('staff__appointment')) 
Смежные вопросы