Django: фильтрация набора запросов по дате не применяет фильтр вообще - PullRequest
0 голосов
/ 16 марта 2019

Я пытаюсь отфильтровать набор запросов по датам.

Сначала я группирую данные по датам, и у меня нет проблем.

inventario_original = Inventario.objects.all()
inventario = inventario_original.values("fecha").annotate(
    valor_coste=Sum(F('existencias') * F('valor_coste')),
    valor_venta=Sum(F('existencias') * F('valor_venta')),
    existencias=Sum('existencias'))

Затем я нахожу последнюю дату вqueryset.

ultima_fecha_cargada = inventario_original.order_by('-fecha')
ultima_fecha_cargada = ultima_fecha_cargada.first().values('fecha')

Если я напечатаю ultima_fecha_cargada.fecha, я получу ['15-03-2019']

Наконец, я хочу отфильтровать набор запросов с элементами с этой последней датой.

inventario_producto = inventario_original.filter(fecha__date=ultima_fecha_cargada.fecha).values("codigo_kinemed").annotate(existencias=Sum('existencias'))

Я получаю полный набор запросов без применения фильтра.Если я печатаю полученные даты, я получаю ['15-03-2019'], поэтому формат даты совпадает.

Также пробовал

filter(fecha=ultima_fecha_cargada.fecha)
filter(fecha=ultima_fecha_cargada)
filter(fecha=date(day=15, month=3, year=2019))
filter(fecha__contains=ultima_fecha_cargada.fecha)
filter(fecha__contains=date(day=15, month=3, year=2019)

Полный код просмотра здесь

def InventarioView(request):
    inventario_original = Inventario.objects.all()
    ultima_fecha_cargada = inventario_original.order_by('-fecha')
    ultima_fecha_cargada = ultima_fecha_cargada.first().values('fecha')

    inventario = inventario_original.values("fecha").annotate(
        valor_coste=Sum(F('existencias') * F('valor_coste')),
        valor_venta=Sum(F('existencias') * F('valor_venta')),
        existencias=Sum('existencias'))

    inventario_producto = inventario_original.filter(fecha__date=ultima_fecha_cargada).values("codigo_kinemed").annotate(
        existencias=Sum('existencias'))

    return render(request, 'catalog/inventario.html', {
        'ultima_fecha_cargada': ultima_fecha_cargada,
        'inventario_producto': inventario_producto,
        'inventario': inventario,
    })

1 Ответ

0 голосов
/ 17 марта 2019

Как заметил @Endre Оба, мой код был неправильным. Это был правильный код (без значений).

ultima_fecha_cargada = ultima_fecha_cargada.first() 

А затем отфильтровать по дате.

inventario_producto = inventario_original.filter(fecha=ultima_fecha_cargada.fecha)

Теперь это работает. Странно то, что прежде чем я смог увидеть результаты использования ultima_fecha_cargada.first().values("fecha"), получил ожидаемое значение, распечатал его правильно и не имел сообщений об ошибках.

Теперь, после перезагрузки компьютера, я начал получать сообщения об ошибках, и код, похоже, работает как Endre Both.

...