我有两个模型:
范本[id 、书名、author_id]
模型作者[id, 姓名]
我需要查询按作者姓名和书名排序的书籍:
result = Books.order_by('author__name', 'title').value_list('author__name', 'title')
Run Code Online (Sandbox Code Playgroud)
但我还需要在每一行添加一个计数器,该计数器将随着每个新作者的出现而重置。
查询的结果应该是:
title name position
-----------------------------------------
book1 Dan Brown 1
book2 Douglas Adams 1
book3 Douglas Adams 2
book4 Douglas Adams 3
book5 Douglas Adams 4
book6 Ernest Hemingway 1
book7 Ernest Hemingway 2
book8 Ernest Hemingway 3
book9 John Steinbeck 1
book10 John Steinbeck 2
Run Code Online (Sandbox Code Playgroud)
是否可以position使用 Django ORM 来实现该字段?
看看这个答案
对于你的情况,我认为这应该有效
from django.db.models.expressions import Window
from django.db.models.functions import RowNumber
from django.db.models import F
result = (
Books.order_by("author__name", "title")
.annotate(
row_number=Window(
expression=RowNumber(), partition_by=[F("author")], order_by=[F("title")]
)
)
.value_list("author__name", "title", "row_number")
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3003 次 |
| 最近记录: |