Sobes.tech
Middle
42

Wenn du Werte direkt in SQL basierend auf einer Bedingung berechnen musst (z.B. Rabatt hängt von der Kundengruppe ab), wie würdest du das im Django ORM machen, um nicht alles in Python zu laden?

Unternehmen wurden gefragt
BP

Antwort von AI

sobes.tech KI

В 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.