آموزش کامل استفاده از Django QuerySet Filter

django queryset filter guide
20 آبان 1403

اگه شما هم با جنگو کار کردید، حتما می‌دونید که QuerySet ها و امکانات فیلتر اون‌ها چقدر کاربردی هستند. QuerySet Filter به شما اجازه می‌دهد تا داده‌های دلخواه خودتون رو از دیتابیس با توجه به شرایطی که می‌خواهید، استخراج کنید. استفاده از این قابلیت می‌تونه در زمان و کارایی پروژه‌های شما تاثیر مثبت زیادی بزاره. پس بیایید دقیق‌تر بشیم و ببینیم چطور می‌شه از این قابلیت به بهترین شکل استفاده کنیم.

اولین چیزی که باید بدونید اینه که QuerySet Filter به شما اجازه می‌ده از شرایط دقیق و متنوعی برای فیلتر کردن داده‌ها استفاده کنید. شما می‌تونید از انواع مختلفی از عملگرها و فیلترها مثل "equals to", "greater than", "less than" و بسیاری امکانات دیگه بهره ببرید. این امکانات به شما این امکان رو می‌ده تا کنترل کامل بر داده‌هایی که از دیتابیس بیرون می‌کشید داشته باشید.

برای استفاده از این فیلترها، شما باید اول با مفهوم QuerySet در جنگو آشنا شوید. QuerySet در واقع نمایشی از کوئری‌هایی است که به دیتابیس ارسال می‌شود و داده‌ها رو برمی‌گردونه. فیلتر کردن روی این QuerySetها می‌تونه با استفاده از توابع مختلف مثل filter(), exclude(), get() و غیره انجام بشه.

یه مثال ساده از کاربرد فیلتر جنگو اینه که مثلاً می‌خوایم تمام کاربران رو بیاریم که اسمشون با "A" شروع بشه. این قضیه خیلی راحت و سریع با استفاده از QuerySet Filter قابل انجامه و مزیت استفاده از این روش اینه که کد شما هم خوانا تر می‌شه و هم دوباره‌کاری ها رو کاهش می‌ده.

حالا بیاید یه مثال واقعی رو بررسی کنیم تا بهتر متوجه بشیم چطور می‌شه از این قابلیت‌ها در پروژه واقعی استفاده کنیم. فرض کنید یه مدل به اسم Book داریم و می‌خوایم کتاب‌هایی رو پیدا کنیم که بیشتر از ۲۰۰ صفحه دارند. برای اینکار می‌تونیم از دستور زیر استفاده کنیم:


books = Book.objects.filter(pages__gt=200)

این دستور چی کار می‌کنه؟ بیایید قدم به قدم جلو بریم:

books = → ما یه متغیر به اسم books تعریف کردیم که قراره نتیجه فیلتر رو نگه‌داره.
Book.objects → این قسمت به ما اجازه می‌ده که به همه‌ی آبجکت‌های مدل Book دسترسی پیدا کنیم.
filter(pages__gt=200) → با استفاده از این فیلتر می‌تونیم کتاب‌هایی که بیشتر از ۲۰۰ صفحه دارند رو انتخاب کنیم. pages__gt=200 یعنی صفحاتی که تعدادشون > از ۲۰۰ باشه.

به این ترتیب به راحتی می‌تونیم با استفاده از QuerySet Filter داده‌ها رو فیلتر کنیم و نتایج دلخواه رو به دست بیاریم.

سوالات متداول

؟

چطور می‌تونم فقط کاربرانی که ایمیل‌شون تایید شده رو فیلتر کنم؟

؟

چگونه می‌تونم داده‌ها را بر اساس تاریخ ثبت کنمشون فیلتر کنم؟

؟

آیا می‌شه چندین شرط فیلتر رو به صورت همزمان استفاده کرد؟