Sobes.tech
Junior — Middle
89

Django ORM-мен жұмыс істегенде Subquery, Exists, F, Q сияқты қосалқы сұрауларды пайдалану тәжірибеңіз бар ма?

AI-дан жауап

sobes.tech AI

Django ORM-да подзапростар мен өрнектер дерекқорға күрделі сұрауларды тиімді әрі анық түрде құруға мүмкіндік береді.

  • Subquery — байланысты кестеден деректер алуды қажет ететін ішкі сұраулар үшін пайдаланылады. Мысалы, әр пайдаланушының соңғы тапсырысын алу:
from django.db.models import OuterRef, Subquery

latest_order = Order.objects.filter(user=OuterRef('pk')).order_by('-date')
users = User.objects.annotate(latest_order_date=Subquery(latest_order.values('date')[:1]))
  • Exists — жазбалардың бар-жоғын тексеру үшін қолданылады, байланысты объектілердің бар-жоғын фильтрлеу үшін қолайлы:
from django.db.models import Exists, OuterRef

orders = Order.objects.filter(user=OuterRef('pk'))
users_with_orders = User.objects.annotate(has_orders=Exists(orders)).filter(has_orders=True)
  • F() — модель өрістерінің мәндеріне сілтеме жасауға мүмкіндік береді, мысалы, басқа өріске негізделген өрісті жаңарту үшін:
from django.db.models import F

Product.objects.update(price=F('price') * 1.1)  # бағасын 10% арттыру
  • Q() — күрделі шарттарды логикалық операторлармен (AND, OR, NOT) құру үшін пайдаланылады:
from django.db.models import Q

products = Product.objects.filter(Q(price__lt=100) | Q(name__icontains='special'))

Бұл құралдар тиімді әрі оқуға оңай сұраулар жазуға көмектеседі, дерекқорға сұраулар санын азайтады.