Получение 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 для именования имен классов (регистр паскаля) и имен полей/функций (регистр змеи).