queryset.last() 不返回正确的顺序/最后一条记录



编写生成 JSON 的代码。JSON 的最后一部分必须以","结尾,因此在代码中我有:

-- 定义一个查询集以检索数据库字段的不同值:

databases_in_workload = DatabaseObjectsWorkload.objects.filter(workload=migration.workload_id).values_list('database_object__database', flat=True).distinct()

-- 然后我循环它:

for database_wk in databases_in_workload:
... do something
if not (database_wk == databases_in_workload.last()):
job_json_string = job_json_string + '} ],'
else:
job_json_string = job_json_string + '} ]'

我希望最后一条记录以方括号结尾,前面以逗号结尾。但相反,情况正好相反。

我还查看了数据库表内容。我对"database_wk"的值是 user02(对于主键值较低的记录)和 user01(对于数据库中 pk 值较高的记录)。顺序(如果 user01 是第一个或最后一个)真的无关紧要,只要最后一条记录被 last() 正确标识 - 所以如果我在查询集迭代中有 user02、user01,我希望 last() 返回 user01。但是 - 这无法正常工作。 奇怪的是,如果在数据库(Postgres)中更改了顺序(首先是user01,然后是user02按主键值排序),那么上面的"if"代码就可以工作,但是在我的情况下last()似乎返回了第一条记录,而不是最后一条。就好像数据库中有一个顺序,查询集中有另一个顺序,last() 正在采用数据库顺序......以前有人遇到/解决了这个问题吗?或者 - 我可以尝试的任何其他方法来识别查询集中的最后一条记录(除了 last())也会有所帮助。提前非常感谢!

之所以这样做是因为没有指定排序。尝试使用order_by.裁判

寄件人:queryset.first()

如果查询集

未定义排序,则查询集按主键自动排序

寄件人:queryset.last()

工作原理与 first() 类似,但返回查询集中的最后一个对象。

如果您不想使用order_by请尝试使用 queryset.latest()

相关内容

最新更新