如何注释 QuerySet 添加按字段分组的行号?

How to annotate a QuerySet adding row numbers groupped by a field?

我有两个模型:

型号书籍[id, title,author_id]

型号作者[id,姓名]

我需要查询按作者姓名和书名排序的图书:

result = Books.order_by('author__name', 'title').value_list('author__name', 'title')

但我还需要为每行添加一个计数器,每个新作者都会重置该计数器。

查询结果应该是:

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

是否可以使用 Django ORM 实现此 position 字段?

看看

对于你的情况,我认为这应该可行

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")
)