我正在努力获取每月的销售媒体。我可以进行计算,但随后我不能只获得值,而是获得完整的查询集。
我找到了不同的选择,并且在某些情况下可以工作,但在其他情况下却没有。我想对于不同的查询集数据和字典也存在一些误解。
这是我的例子。
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
答案 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
,我很茫然。