@bubaley

Как в Django максимальные значения (срез последних) на выбранную дату?

Здравствуйте, у меня есть модель - OutletHistoryItem, со следующими полями:
  • outlet
  • nomenclature
  • amount
  • created_at

Мне нужно на выбранную дату получить какое количество номенклатуры было на торговой точке.
Сейчас я выполняю следующие действия:
1. Отсекаю лишние записи
queryset = OutletHistoryItem.objects.filter(created_at__lte=start_date)

2. Группирую значения по outlet и nomenclature для получения максимальной даты
queryset = queryset.values('outlet', 'nomenclature').annotate(date=Max('created_at')).order_by('outlet', 'nomenclature')

3. Собираю в цикле "или условия - | Q" с outlet, nomenclature и created_at (максимальная дата по группировке) и повторно фильтрую значения для получения amount на полученные максимальные даты.
args = Q()
for el in current_values:
    args |= Q(**{'outlet': el['outlet'], 'nomenclature': el['nomenclature'], 'created_at': el['date']})
results = OutletNomenclatureHistory.objects.filter(args)

Можно ли сразу во 2-пункте получить amount на максимальную дату? Пробовал добавить F - не работает
annotate(date=Max('created_at'), max_amount=F('amount'))
  • Вопрос задан
  • 62 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы