django-filter kutubxonasi, SearchFilter, OrderingFilter va murakkab so'rovlar
10-sinfAdvanced Python Back-end2-hafta · 6-darsDjangoFilterBackend, FilterSet klassi va maydonlar bo'yicha qat'iy filtrlash.
To'liq matnli qidiruv: sarlavha, qisqa mazmun va matn ichidan kalit so'zlarni topish.
Natijalarni sana, ko'rishlar soni yoki sarlavha bo'yicha tartiblash.
Filtrlash, Qidiruv va Tartiblash farqi
Har biri o'zining aniq vazifasiga ega
Barcha buyruqlar bitta qator URL orqali serverga uzatiladi
PostFilter va sana oraliqlari
import django_filters
from apps.news.models import Post
class PostFilter(django_filters.FilterSet):
published_from = django_filters.IsoDateTimeFilter(
field_name="published_at", lookup_expr="gte"
)
published_to = django_filters.IsoDateTimeFilter(
field_name="published_at", lookup_expr="lte"
)
class Meta:
model = Post
fields = {
"status": ["exact"],
"category": ["exact"],
"author": ["exact"],
"tags": ["exact"],
}
class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.select_related("category", "author") \
.prefetch_related("tags").all()
lookup_field = "slug"
filterset_class = PostFilter
search_fields = ("title", "excerpt", "body")
ordering_fields = ("published_at", "created_at", "title", "status")
ordering = ("-published_at", "-created_at")
Qidiruvni 100 barobar tezlashtirish siri
Full Table Scan (Sekin) vs B-Tree Binary Search (Bir zumda)
HTTP 200 OK — Filters tugmasi o'ng tomonda faol
{
"count": 1,
"results": [
{
"id": 12,
"title": "Sun'iy intellekt kelajagi",
"status": "published",
"published_at": "2026-10-04T10:00:00Z"
}
]
}
Bosing va tekshiring
Model maydonlari qanday mezonlar bilan saralanishini belgilovchi sinf.
Bosing va tekshiring
Sarlavha va matn ichidan kalit so'zlarni topib beruvchi DRF filtri.
Bosing va tekshiring
Ma'lumotlar bazasida qidiruv tezligini yuzlab barobar oshiruvchi struktura.
URL parametrida ?ordering=-published_at deb yozilganda natijalar qanday tartibda chiqadi?
pip install django-filter qilib, settings/base.py ga ulang.
apps/news/filters.py da PostFilter klassini yozing.
PostViewSet ga filterset_class, search_fields va ordering_fields ni ulang va testlang.
Keyingi haftada: Pagination (Sahifalash), Throttling (Rate limiting), Fayllar bilan ishlash va Swagger dokumentatsiya!