QuerySet’ni filtrlash


ULASHISH

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!