如何枚举Django中返回的行?

如何枚举Django中返回的行?,django,postgresql,Django,Postgresql,类似于Python的enumerate()的工作方式,我想为返回的每一行分配一个唯一的递增整数。(不是行id,而是结果中的行号!) i、 e 输出为 0 Mary 1 John 2 Nikita 3 Fred 在这种情况下,我希望在SQL后端执行此操作,而不是简单地围绕查询结果包装enumerate() 我也不希望在数据已更改的查询中枚举是稳定的。这可以通过Django 1.x中的注释来完成: from django.db.models.expressions import RawSQL

类似于Python的
enumerate()
的工作方式,我想为返回的每一行分配一个唯一的递增整数。(不是行id,而是结果中的行号!)

i、 e

输出为

0 Mary
1 John
2 Nikita
3 Fred
在这种情况下,我希望在SQL后端执行此操作,而不是简单地围绕查询结果包装
enumerate()


我也不希望在数据已更改的查询中枚举是稳定的。

这可以通过Django 1.x中的
注释来完成:

from django.db.models.expressions import RawSQL                                 

qry = models.People.objects.all().\
    annotate(N=RawSQL('row_number() over ()', [])).\
    values('N', 'name')
for p in qry:
    print p['N'], p['name']

在Django 2.0中,这可以通过使用的表达式来实现。

除了在查询集上调用
enumerate
之外,您还需要其他行为吗?查询集是可编辑的,所以如果它适合您的需要,您可以这样做。或者您正在寻找一个在两次查询之间保持稳定的ID?
from django.db.models.expressions import RawSQL                                 

qry = models.People.objects.all().\
    annotate(N=RawSQL('row_number() over ()', [])).\
    values('N', 'name')
for p in qry:
    print p['N'], p['name']