مرتبسازی (QuerySet Order By)
مرتبسازی: چیدمان دادهها 📊
با استفاده از order_by() میتونید دادهها رو به ترتیب دلخواه مرتب کنید. این کار برای نمایش لیستها خیلی مهمه!
مرتبسازی ساده
# مرتبسازی صعودی
posts = Post.objects.all().order_by('created_at')
# مرتبسازی نزولی
posts = Post.objects.all().order_by('-created_at')
# مرتبسازی چند فیلد
posts = Post.objects.all().order_by('published', '-created_at')
مثالهای کاربردی:
# جدیدترین پستها اول
latest = Post.objects.all().order_by('-created_at')
# محبوبترین پستها (بیشترین view)
popular = Post.objects.all().order_by('-views', '-created_at')
# مرتب بر اساس نام نویسنده
by_author = Post.objects.all().order_by('author__username', 'title')
مرتبسازی در مدل (Meta ordering)
میتونید مرتبسازی پیشفرض رو در مدل تعریف کنید:
class Post(models.Model):
title = models.CharField(max_length=200)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ['-created_at'] # مرتبسازی پیشفرض
# حالا همه QuerySet ها به صورت خودکار مرتب میشن
posts = Post.objects.all() # خودکار بر اساس created_at مرتب میشه
نکته: اگر مرتبسازی پیشفرض در Meta تعریف شده، میتونید با
order_by() اون رو override کنید. همچنین میتونید با order_by() بدون آرگومان مرتبسازی رو حذف کنید.
🎯 تمرین عملی:
یک QuerySet بسازید که پستها رو اول بر اساس published (True اول)، بعد بر اساس views (بیشترین اول) و در نهایت بر اساس created_at (جدیدترین اول) مرتب کنه.
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.