فیلتر (QuerySet Filter)
می خواهیم «فیلتر QuerySet» را ساده کنیم. فیلتر یعنی فقط نتایج دلخواه را برگردانیم. QuerySet فهرست نتایج دیتابیس است. سپس با شرط ها، خروجی را دقیق می کنیم. مثل پیدا کردن دانش آموزانی که اسمشان «امیـل» است.
فیلتر ساده با filter()
filter() با آرگومان های کلیدی کار می کند. هر آرگومان یک شرط است. نتیجه فقط ردیف های مطابق است.
mydata = Member.objects.filter(firstname='Emil').values()
ترکیب شرط ها: AND
چند شرط را با کاما بده. این یعنی AND. هر دو شرط باید درست باشند.
mydata = Member.objects.filter(lastname='Refsnes', id=2).values()
ترکیب شرط ها: OR با دو روش
یا دو فیلتر را با | ادغام کن. یا از Q استفاده کن. Q برای شرط های پیچیده عالی است.
mydata = Member.objects.filter(firstname='Emil').values() | Member.objects.filter(firstname='Tobias').values()
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))
Field Lookup ها: نحو حرفه ای
برای شرط های خاص از «Field Lookup» استفاده کن. شکل کلی: field__lookup. دو زیرخط اجباری است.
mydata = Member.objects.filter(firstname__startswith='L').values()
نکته: __startswith مثل LIKE 'L%' است. بنابراین نتایج با حرف L شروع می شوند.
گام های عملی
- یک QuerySet ساده بگیر.
- شرط ها را با
filter()اضافه کن. - برای AND، آرگومان ها را با کاما بده.
- برای OR، از
|یاQاستفاده کن. - در قالب، نتایج را با حلقه
forنشان بده.
جمع بندی سریع
- filter() نتایج را محدود می کند.
- کاما یعنی AND.
- | یا Q یعنی OR.
field__lookupشرط های خاص می سازد.__startswithمثلLIKE 'X%'عمل می کند.
ادامه مسیر: صفحه متد get جنگو را برای مقدمات ببین. سپس با مرتب سازی QuerySet آشنا شو. همچنین مقاله معرفی QuerySet پایه ها را مرور می کند.