Django: получить конкретное значение из набора запросов

Я пытаюсь получить средства массовой информации продаж в месяц. Я могу выполнить расчет, но тогда я не могу получить только значение вместо полного набора запросов.

Я нашел разные варианты, и некоторые из них работают в одном контексте, но не в другом. Я предполагаю, что есть некоторое непонимание различных данных и словарей запросов.

Вот мой пример.

 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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
470
1

Ответы 1

Я думаю, ты ищешь 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 я в растерянности.

чтобы установить значение в словаре, это может выглядеть как inventario_diferencia['my_key_value'] = media_venta_mes.first().media

AMG 20.03.2019 17:27

также можно изменить строку media_venta_mes = Ventas.objects.filter(prod_codigo=este['codigo_kinemed']).va‌​lues("prod_codigo").‌​annotate(media=Sum("‌​uds")/Count(TruncMon‌​th('fecha'), distinct=True)) и добавить туда первую. Например: media_venta_mes = Ventas.objects.filter(prod_codigo=este['codigo_kinemed']).va‌​lues("prod_codigo").‌​annotate(media=Sum("‌​uds")/Count(TruncMon‌​th('fecha'), distinct=True)).first() тогда вы сможете использовать media_venta_mes.media для получения значения. Чтобы установить в dict: inventario_diferencia['my_key_value'] = media_venta_mes.media

AMG 20.03.2019 17:30

Я обновил вопрос после проверки ваших предложений.

Francisco Ghelfi 20.03.2019 17:58

также каков результат print(media_venta_mes) сейчас?

AMG 20.03.2019 18:19

Если вы имеете в виду последний вариант с .first() в наборе запросов, ответ: {'prod_codigo': 'TP3 SHOULDER', 'media': 24}

Francisco Ghelfi 20.03.2019 19:05

Нет, я добавил тест к вопросу

Francisco Ghelfi 20.03.2019 20:04

Другие вопросы по теме