Sobes.tech
Middle
37

Jei reikia skaičiuoti reikšmes tiesiogiai SQL pagal sąlygą (pavyzdžiui, nuolaida priklauso nuo kliento kategorijos), kaip tai padarytum Django ORM, kad nereikėtų visko įkelti į Python?

Įmonės kur klausė
BP

Atsakymas iš 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.