Сводные данные и сложные аннотации в Django ORM

ORM в Django позволяет нам легко аннотировать (добавлять поля в) наборы запросов на основе связанных данных, однако я не могу найти способ получить несколько аннотаций для различных отфильтрованных подмножеств связанных данных.

Этот вопрос возникает в связи с django-helpdesk , системой отслеживания неисправностей с открытым исходным кодом на базе Django. Мне нужно, чтобы данные были сведены таким образом, чтобы составлять диаграммы и составлять отчеты

. Рассмотрим следующие модели:

CHOICE_LIST = (
    ('open', 'Open'),
    ('closed', 'Closed'),
)

class Queue(models.model):
    name = models.CharField(max_length=40)

class Issue(models.Model):
    subject = models.CharField(max_length=40)
    queue = models.ForeignKey(Queue)
    status = models.CharField(max_length=10, choices=CHOICE_LIST)

И этот набор данных:

Очереди:

ID | Name
---+------------------------------
1  | Product Information Requests
2  | Service Requests

Проблемы:

ID | Queue | Status
---+-------+---------
1  | 1     | open
2  | 1     | open
3  | 1     | closed
4  | 2     | open
5  | 2     | closed
6  | 2     | closed
7  | 2     | closed

Я хотел бы, чтобы аннотация / агрегат выглядел примерно так:

Queue ID | Name                          | open | closed
---------+-------------------------------+------+--------
1        | Product Information Requests  | 2    | 1
2        | Service Requests              | 1    | 3

Это в основном кросс-таблица или сводная таблица, выражаясь языком Excel. В настоящее время я создаю этот вывод, используя несколько пользовательских SQL-запросов, однако, если я смогу перейти к использованию Django ORM, я смогу более легко фильтровать данные динамически без изворотливой вставки предложений WHERE в мой SQL.

Для «бонусных баллов»: Как это сделать, если в сводном поле ( status в приведенном выше примере) была дата, а мы хотели, чтобы столбцы были месяцами / неделями / кварталами / днями?

13
задан rossp 11 May 2011 в 01:57
поделиться