Я хочу получить количество всех элементов в базе данных для данного пользователя, сгруппированных в сегменты в зависимости от отметки времени.
У меня есть словарь, который определяет набор категорий, таких как:
age_categories = {'cat1': {'start': <timestamp>, 'end': <timestamp>}},
{'cat2': {'start': <timestamp>, 'end': <timestamp>}},
...
Я хочу получить результат из базы данных, которая выглядит следующим образом:
User | cat1 | cat2 | cat3 | ...
Joe Smith | 12 | 0 | 7 | ...
Bob Smith | 4 | 9 | 11 | ...
На основании этого вопроса , я пробовал:
age_query = [key=Count(Case(When(datefield__range=(val['start'], val['end']), then=1))) for key, val in age_categories.items()]
...
results = Table.objects.filter(...).values(...).annotate(*age_query)
но я не могу заставить это работать. Это дает мне неправильную синтаксическую ошибку в строке, где я определяю age_query
.
Если я изменю запрос на список строк как
age_query = [key + "=Count(Case(When(datefield__range=('" + val['start'] + "', '" + val['end'] + "'), then=1)))" for key, val in age_categories.items()]
это говорит мне, что Complex annotations require an alias
, когда предполагается, что ключом словаря должен быть псевдоним.
Это достижимо? Я знаю, как это сделать в сыром SQL, но я действительно предпочел бы использовать инструменты Django, если это вообще возможно.
Спасибо.
Python 3.6.5
Джанго 1.11.6