QuerySet’ni filtrlash
QuerySet’ni filtrlash
filter() metodi qidiruvni filtrlash uchun ishlatiladi va faqat qidiruv shartiga mos keladigan qatorlarni qaytarish imkonini beradi.
Oldingi bobda bilib olganimizdek, maydon nomlari bo‘yicha quyidagicha filtrlashimiz mumkin:
Misol
Faqat firstname qiymati 'Emil' bo‘lgan yozuvlarni qaytarish:
mydata = Member.objects.filter(firstname='Emil').values()
Misolni ishga tushirish »
SQL’da yuqoridagi operator (so‘rov) quyidagicha yoziladi:
SELECT * FROM members WHERE firstname = 'Emil';
AND
filter() metodi argumentlarni **kwargs (kalit so‘zli argumentlar) sifatida qabul qiladi, shuning uchun ularni vergul bilan ajratib, bir nechta maydon bo‘yicha filtrlashingiz mumkin.
Misol
lastname qiymati "Refsnes" va id qiymati 2 bo‘lgan yozuvlarni qaytarish:
mydata = Member.objects.filter(lastname='Refsnes', id=2).values()
Misolni ishga tushirish »
SQL’da yuqoridagi operator (so‘rov) quyidagicha yoziladi:
SELECT * FROM members WHERE lastname = 'Refsnes' AND id = 2;
OR
firstname qiymati Emil yoki Tobias bo‘lgan yozuvlarni qaytarish (ya’ni ikkala shartga emas, balki ulardan istalganiga mos keladigan yozuvlarni qaytarish) yuqoridagi AND misolidagidek oson emas.
Vertikal chiziq (pipe) | belgisi bilan ajratilgan bir nechta filter() metodidan foydalanishimiz mumkin. Natijalar bitta modelga birlashadi.
Misol
firstname qiymati "Emil" yoki "Tobias" bo‘lgan yozuvlarni qaytarish:
mydata = Member.objects.filter(firstname='Emil').values() | Member.objects.filter(firstname='Tobias').values()
Misolni ishga tushirish »
Yana bir keng tarqalgan usul — Q ifodalarini import qilib, ulardan foydalanish:
Misol
firstname qiymati "Emil" yoki "Tobias" bo‘lgan yozuvlarni qaytarish:
from django.http import HttpResponse
from django.template import loader
from .models import Member
from django.db.models import Q
def testing(request):
mydata = Member.objects.filter(Q(firstname='Emil') | Q(firstname='Tobias')).values()
template = loader.get_template('template.html')
context = {
'mymembers': mydata,
}
return HttpResponse(template.render(context, request))
Misolni ishga tushirish »
SQL’da yuqoridagi operator (so‘rov) quyidagicha yoziladi:
SELECT * FROM members WHERE firstname = 'Emil' OR firstname = 'Tobias';
Field lookup’lar
Django’da SQL operatorlari va WHERE shartlarini ko‘rsatishning o‘z usuli bor.
Django’da muayyan where shartlarini hosil qilish uchun "Field lookups" (maydon bo‘yicha qidiruv shartlari) imkoniyatidan foydalaning.
Field lookup’lar — muayyan SQL kalit so‘zlariga mos keladigan kalit so‘zlar.
Misol:
__startswith kalit so‘zidan foydalaning:
.filter(firstname__startswith='L');
Bu quyidagi SQL operatori bilan bir xil:
WHERE firstname LIKE 'L%'
Yuqoridagi operator firstname qiymati 'L' harfi bilan boshlanadigan yozuvlarni qaytaradi.
Field lookup sintaksisi
Barcha field lookup kalit so‘zlari maydon nomi, undan keyin ikkita(!) pastki chiziq belgisi va kalit so‘z bilan yozilishi kerak.
Member modelimizda bu operator quyidagicha yoziladi:
Misol
firstname qiymati 'L' harfi bilan boshlanadigan yozuvlarni qaytarish:
mydata = Member.objects.filter(firstname__startswith='L').values()
Misolni ishga tushirish »
Field lookup’lar ma’lumotnomasi
Barcha field lookup kalit so‘zlari ro‘yxati:
| Kalit so‘z | Tavsif |
|---|---|
| contains | Berilgan iborani o‘z ichiga oladi |
| icontains | contains bilan bir xil, lekin katta-kichik harflarni farqlamaydi |
| date | Sanaga mos keladi |
| day | Sananing kuniga mos keladi (oyning kuni, 1-31) (sanalar uchun) |
| endswith | Berilgan qiymat bilan tugaydi |
| iendswith | endswith bilan bir xil, lekin katta-kichik harflarni farqlamaydi |
| exact | Aniq moslik |
| iexact | exact bilan bir xil, lekin katta-kichik harflarni farqlamaydi |
| in | Qiymatlardan biriga mos keladi |
| isnull | NULL qiymatlarga mos keladi |
| gt | Katta |
| gte | Katta yoki teng |
| hour | Soatga mos keladi (sana-vaqt qiymatlari uchun) |
| lt | Kichik |
| lte | Kichik yoki teng |
| minute | Daqiqaga mos keladi (sana-vaqt qiymatlari uchun) |
| month | Oyga mos keladi (sanalar uchun) |
| quarter | Yil choragiga mos keladi (1-4) (sanalar uchun) |
| range | Oraliqdagi qiymatlarga mos keladi |
| regex | Muntazam ifodaga (regular expression) mos keladi |
| iregex | regex bilan bir xil, lekin katta-kichik harflarni farqlamaydi |
| second | Soniyaga mos keladi (sana-vaqt qiymatlari uchun) |
| startswith | Berilgan qiymat bilan boshlanadi |
| istartswith | startswith bilan bir xil, lekin katta-kichik harflarni farqlamaydi |
| time | Vaqtga mos keladi (sana-vaqt qiymatlari uchun) |
| week | Hafta raqamiga mos keladi (1-53) (sanalar uchun) |
| week_day | Hafta kuniga mos keladi (1-7), 1 — yakshanba |
| iso_week_day | ISO 8601 bo‘yicha hafta kuniga mos keladi (1-7), 1 — dushanba |
| year | Yilga mos keladi (sanalar uchun) |
| iso_year | ISO 8601 bo‘yicha yilga mos keladi (sanalar uchun) |
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
