Django: получить конкретное значение из набора запросов - PullRequest
0 голосов
/ 20 марта 2019

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

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

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

 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 голосов
/ 20 марта 2019

Я думаю, что вы ищете 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, так как у вас будут нежелательные последствия.

[EDIT]

на основании ваших ошибок, вы можете попробовать использовать 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 Я в растерянности.

...