Middle
43
Als je waarden direct in SQL moet berekenen op basis van een voorwaarde (bijvoorbeeld, korting hangt af van de klantcategorie), hoe zou je dat doen in Django ORM om niet alles naar Python te laden?
Bedrijven waar gevraagd werd
BP
Antwoord van AI
sobes.tech AI
В Django ORM для вычислений с условием прямо в SQL можно использовать выражения Case и When из модуля django.db.models.
Например, если скидка зависит от категории клиента, можно сделать так:
from django.db.models import Case, When, Value, IntegerField, F
# Предположим, у модели Order есть поле client__category
orders = Order.objects.annotate(
discount=Case(
When(client__category='VIP', then=Value(20)), # скидка 20%
When(client__category='Regular', then=Value(10)), # скидка 10%
default=Value(0),
output_field=IntegerField()
)
)
for order in orders:
print(order.id, order.discount)
Такое выражение будет преобразовано в SQL с условным оператором CASE, и вычисления выполнятся на стороне базы, без выгрузки всех данных в Python.