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'))
Бұл құралдар тиімді әрі оқуға оңай сұраулар жазуға көмектеседі, дерекқорға сұраулар санын азайтады.