متدهای مقایسهای (Lookups)
اغلب اوقات نیاز خواهد بود که دادهها را بر اساس شرایط دقیقتری—مانند «بزرگتر از»، «کوچکتر از»، «شامل یک عبارت» یا «بین دو تاریخ»—فیلتر کنیم. جنگو برای این منظور از سیستم عبارات جستجو (lookup expressions) پشتیبانی میکند که با استفاده از دو زیرخط (__
) پس از نام فیلد اعمال میشوند.
⸺ مساوی
projectObj = project.objects.filter(title="Fluent Speech AI Project")
رکوردهایی که فیلد title
آنها دقیقاً برابر با مقدار دادهشده باشد. (معادل با استفاده از =
در SQL)
💡 نیازی به __exact
نیست؛ این رفتار پیشفرض filter()
است.
⸺ شامل بودن (Contains)
آخرین رکورد از مجموعه نتایج را برمیگرداند. مانند first()
، در صورت عدم وجود داده، None
بازمیگرداند.
projectObjs = project.objects.filter(title__contains="AI")
رکوردهایی که فیلد title
آنها عبارت "AI" را در هر جایی داشته باشند (حساس به بزرگوکوچکی حروف).
💡 برای جستجوی غیرحساس به بزرگوکوچکی حروف، از __icontains
استفاده میشود.
⸺ بزرگتر یا مساوی
projectObjs = project.objects.filter(created__gte="2023-01-01") # gte = greater than or equal
رکوردهایی که تاریخ ایجاد (created
) آنها بزرگتر یا مساوی تاریخ دادهشده باشد.
⸺ کوچکتر یا مساوی
projectObj = project.objects.filter(updated__lte='2023-01-01') # lte = less than or equal
رکوردهایی که تاریخ اخرین تغییرات آنها (updated
) کوچکتر یا مساوی تاریخ مشخصشده باشد.
⸺ بین دو مقدار (Range)
projectObj = project.objects.filter(created__range=('2024-01-01', '2025-01-01'))
رکوردهایی که مقدار فیلد created
آنها بین دو تاریخ (شامل خود دو سر) باشد.
💡 معادل با BETWEEN '2024-01-01' AND '2025-01-01'
در SQL