Я пытаюсь получить средства массовой информации продаж в месяц. Я могу выполнить расчет, но тогда я не могу получить только значение вместо полного набора запросов.
Я нашел разные варианты, и некоторые из них работают в одном контексте, но не в другом. Я предполагаю, что есть некоторое непонимание различных данных и словарей запросов.
Вот мой пример.
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






Я думаю, ты ищешь
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 я в растерянности.
также можно изменить строку 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 = Ventas.objects.filter(prod_codigo=este['codigo_kinemed']).values("prod_codigo").annotate(media=Sum("uds")/Count(TruncMonth('fecha'), distinct=True)).first() тогда вы сможете использовать media_venta_mes.media для получения значения. Чтобы установить в dict: inventario_diferencia['my_key_value'] = media_venta_mes.media
Я обновил вопрос после проверки ваших предложений.
также каков результат print(media_venta_mes) сейчас?
Если вы имеете в виду последний вариант с .first() в наборе запросов, ответ: {'prod_codigo': 'TP3 SHOULDER', 'media': 24}
Нет, я добавил тест к вопросу
чтобы установить значение в словаре, это может выглядеть как
inventario_diferencia['my_key_value'] = media_venta_mes.first().media