QuerySet API詳解-order_by:
order_by
:指定將查詢的結果根據某個字段進行排序。如果要倒敘排序,那么可以在這個字段的前面加一個負號。示例代碼如下:
# 時間從前往回排: # orders = BookOrder.objects.order_by("create_time") # 時間從后往前排(與上面相反): orders = BookOrder.objects.order_by("-create_time") # 時間從后往前排,如果時間相同再按照價格排: # orders = BookOrder.objects.order_by("-create_time", "price") # 根據訂單圖書的評分進行排序: # orders = BookOrder.objects.order_by("book__rating") # 根據圖書銷量進行排序: orders = Book.objects.annotate(book_sum=Count("bookorder")).order_by("book_sum") # 這里的bookorder和bookorder__id是一樣的 for item in orders: print(item.id, item.name, item.book_sum) return HttpResponse("success")
一定要注意的一點是,多個order_by
,會把前面排序的規則給打亂,而使用后面的排序方式。比如以下代碼:
orders = BookOrder.objects.order_by("-create_time").order_by("price")) # 不要寫成如下格式:
它只會根據作者的名字進行排序,而不是使用文章的創建時間。