Получение n значений с n параметрами с помощью Django Queryset

Это мой первый вопрос. Если мой вопрос не ясен, дайте мне знать :)

В течение 4 месяцев я изучаю Django (обучение на практике) в своем проекте. У меня есть одна таблица под названием материал, которая содержит название материала и цену. Здесь я опишу мою таблицу:

id materialName price
1 Not Required 0
2 Material 1 123
3 Material 2 456
4 Material 3 900

Я хочу рассчитать общую стоимость материала, получив цену из таблицы. Это выглядит нормально, если я хочу получить только 1 цену. Но мне нужно получить 4 значения цен из того, что пользователь хочет ввести. Допустим, пользователь выбирает "Материал 3", "Материал 2", "Не требуется" и "Не требуется". Таким образом, есть 4 цены материала. Тогда я использую набор запросов следующим образом:

x = rawmaterial.objects.filter(Q(materialName = 'Material 3') | Q(materialName = 'Material 2') | Q(materialName = 'Not Required') | Q(materialName = 'Not Required')).values_list('price',flat=True)

но результат (900, 456, 0) не такой как (900, 456, 0, 0). Я пробовал с SQL запросом, используя OR, есть ли возможность получить 4 значения? Спасибо :)

Вы не можете делать такие запросы. Filter отфильтрует значения, а не сделает их 0. Вместо этого вы можете использовать условное выражение . В вашем случае можно рассмотреть Case:

from django.db.models import Case, Value, When, F

rawmaterial.objects.annotate(
     required_prices=Case(
         When(materialName__in =['Material 3','Material 2', 'Not Required'], then=F('price')),
         default=Value(0),
     )
).values_list('required_prices', flat=True)

Пожалуйста, следуйте руководству по стилю pep-8 для именования имен классов (регистр паскаля) и имен полей/функций (регистр змеи).

Вернуться на верх