在Django中,order_by
是一个查询集(QuerySet)的方法,用于对查询结果进行排序。你可以根据一个或多个字段对查询结果进行升序或降序排序。
order_by
按升序排序。-
实现降序排序。假设你有一个博客应用,其中有Post
模型,你想根据发布日期对博客文章进行排序。
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
pub_date = models.DateTimeField('date published')
你可以使用order_by
对查询结果进行排序:
# 按发布日期升序排序
posts = Post.objects.order_by('pub_date')
# 按发布日期降序排序
posts = Post.objects.order_by('-pub_date')
假设你有两个模型Author
和Book
,你想根据作者写的书的数量对作者进行排序。
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
你可以使用annotate
和order_by
来实现这个需求:
from django.db.models import Count
# 按作者写的书的数量降序排序
authors = Author.objects.annotate(num_books=Count('book')).order_by('-num_books')
通过这种方式,你可以基于另一个模型的查询集长度对Django模型进行排序。
领取专属 10元无门槛券
手把手带您无忧上云