Py学习  »  Django

django:按日期筛选查询集根本不应用任何筛选器

Francisco Ghelfi • 4 年前 • 130 次点击  

我试图按日期筛选查询集。

首先,我按日期对数据进行分组,没有问题。

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'))

然后我在查询集中找到最后一个日期。

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'))

我得到完整的查询集,没有应用过滤器。如果我打印出结果日期 [2019年3月15日] 所以日期格式匹配。

也试过了

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,
    })
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38223
 
130 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Francisco Ghelfi
Reply   •   1 楼
Francisco Ghelfi    5 年前

正如@endre所说,我的代码不对。这是正确的代码(没有值)。

ultima_fecha_cargada = ultima_fecha_cargada.first() 

然后按日期过滤。

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

现在它开始工作了。奇怪的是,在我看到使用的结果之前 ultima_fecha_cargada.first().values("fecha") ,获取了预期值,正确打印出来,没有错误消息。

现在,在重新启动PC之后,我开始收到错误消息,代码看起来像endre所说的那样。