Middle
46
Αν χρειάζεται να υπολογίσεις τιμές απευθείας σε SQL βάσει μιας συνθήκης (π.χ., η έκπτωση εξαρτάται από την κατηγορία του πελάτη), πώς θα το έκανες στο Django ORM ώστε να μην φορτώνεις τα πάντα στην Python;
Εταιρείες όπου ρωτήθηκαν
BP
Απάντηση από 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.