django-queryset.last()未返回正确的订单/最后一条记录

django-queryset.last()未返回正确的订单/最后一条记录,django,Django,编写生成JSON的代码。JSON的最后一部分必须以“,”结尾,因此在代码中我有: --定义查询集以检索数据库字段的不同值: databases_in_workload = DatabaseObjectsWorkload.objects.filter(workload=migration.workload_id).values_list('database_object__database', flat=True).distinct() --然后我在上面循环: for database_

编写生成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是first或last)实际上并不重要,只要last()正确标识了最后一条记录-因此,如果查询集迭代中有user02、user01,我希望last()返回user01。但是,这无法正常工作。
奇怪的是,如果数据库(Postgres)中的顺序发生了变化(首先是user01,然后是user02,按主键值排序),那么上面的“if”代码可以工作,但在我的情况下last()似乎返回的是第一条记录,而不是最后一条记录。这就好像数据库中有一个顺序,查询集中有另一个顺序,而last()接受数据库顺序。。。以前有人遇到/解决过这个问题吗?或者-我可以尝试的用于标识查询集中最后一条记录的任何其他方法(last()除外)也会有所帮助。非常感谢

原因是它的行为方式是因为没有指定顺序。尝试使用
order\u by

From:
queryset.first()

如果QuerySet没有定义排序,那么QuerySet将由主键自动排序

发件人:
queryset.last()

与first()类似,但返回queryset中的最后一个对象


如果您不想使用
order\u by
,那么尝试使用手动生成json只是一个完整的WTF-stdlib中有一个
json
包,它知道如何将Python序列化为json。