如何枚举Django中返回的行?
类似于Python的如何枚举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
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']