Sobes.tech
Middle
39

Si necesitas calcular valores directamente en SQL según una condición (por ejemplo, el descuento depende de la categoría del cliente), ¿cómo lo harías en Django ORM para no cargar todo en Python?

Empresas donde se preguntó
BP

Respuesta de la IA

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.