Django:从queryset获取特定值

时间:2019-03-20 15:26:33

标签: python django dictionary django-queryset

我正在努力获取每月的销售媒体。我可以进行计算,但随后我不能只获得值,而是获得完整的查询集。

我找到了不同的选择,并且在某些情况下可以工作,但在其他情况下却没有。我想对于不同的查询集数据和字典也存在一些误解。

这是我的例子。

 for este in inventario_diferencia:
        este['stock_valor_venta'] = este['existencias'] * este['valor_venta']
        este['diferencia'] = inventario_original.filter(fecha=diferencia_fecha, codigo_kinemed=este['codigo_kinemed']).values()[0]['existencias'] - este['existencias']
        media_venta_mes = Ventas.objects.filter(prod_codigo=este['codigo_kinemed']).values("prod_codigo").annotate(media=Sum("uds")/Count(TruncMonth('fecha'), distinct=True))

如果打印media_venta_mes,我将得出正确的计算结果。例如:<QuerySet [{'prod_codigo': 'TP3 SHOULDER', 'media': 24}]>

然后我要在常规media词典中插入该inventario_diferencia值。

如果我做media_venta_mes = media_venta_mes.values("media"),我会得到<QuerySet [{'media': 24}]>

如果我尝试media_venta_mes = media_venta_mes.get("media")(它对我有用),我会得到too many values to unpack (expected 2)

如果我尝试media_venta_mes = media_venta_mes.media,我会得到'QuerySet' object has no attribute 'media'

我尝试了更多我现在无法记录的内容。我知道我在这里是个愚蠢的新手,对不起,谢谢您的帮助。

测试更新

我尝试media_venta_mes[0].media并获得'dict' object has no attribute 'media'

我尝试media_venta_mes['media']我得到TypeError

我尝试media_venta_mes.first().media我得到'dict' object has no attribute 'media'

如果我尝试

media_venta_mes = Ventas.objects.filter(prod_codigo=este['codigo_kinemed']).values("prod_codigo").annotate(media=Sum("uds")/Count(TruncMonth('fecha'), distinct=True)).first()

este['diferencia_mes'] = media_venta_mes.media

我得到'dict' object has no attribute 'media'

如果我尝试media_venta_mes.first()['media'],我会得到'NoneType' object is not subscriptable

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找 media_venta_mes['media']media_venta_mes[0].media 但我不确定我是否完全理解这个问题。您可能还在寻找“第一”便捷方法: https://docs.djangoproject.com/en/dev/ref/models/querysets/#first

基本上,您要获取查询集的第一条记录,然后获取属性。

在尝试将变量设置为具有相同名称的另一个变量时要格外小心,例如:media_venta_mes = media_venta_mes.media,因为这样会产生一些不良后果。

[编辑]

根据您的错误,您可以尝试使用 media_venta_mes[0]['media'] 要么 media_venta_mes.first()['media'] 因为这是从字典中获取元素的典型方法。

[编辑]

如果print(media_venta_mes.first())产生了{'prod_codigo': 'TP3 SHOULDER', 'media': 24} 但是media_venta_mes.first()['media']的收益为'NoneType' object is not subscriptable,我很茫然。