2017-03-21 47 views
-3

編寫生成JSON的代碼。 JSON的最後一節有一個「」被終止,所以在我的代碼有:django - queryset.last()不返回正確的順序/最後一條記錄

- 定義查詢集檢索數據庫字段的不同值:

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(DB中pk值較高的記錄)。順序(如果user01是第一個或最後一個)真的沒有關係,只要最後一條記錄被last()正確標識 - 所以如果在查詢集迭代中有user02,user01,我期望last()返回用戶01。但是 - 這不能正常工作。 奇怪的是,如果在數據庫中(Postgres)的順序發生了變化(首先有user01,然後user02按主鍵值排序),那麼上面的「if」代碼有效,但在我的情況下,last()似乎返回第一個記錄,而不是最後一個。就好像數據庫中有一個訂單,查詢集中有另一個訂單,而last()正在採用數據庫訂單......有人遇到/解決過這個問題嗎?另外 - 用於識別查詢集中最後一條記錄(除last())之外的其他任何方法都可以幫助我。提前謝謝了!

+0

生成JSON用手嘗試僅僅是一個完整的跆拳道 - 有一個'json'包,知道如何序列Python來JSON的STDLIB。 –

回答

1

原因是表現的方式是因爲沒有指定排序。嘗試使用order_byREF

來自:queryset.first()

如果查詢集沒有已定義的順序,則該查詢集自動由主鍵

有序自:queryset.last()

作品狀的第一(),但返回查詢集中的最後一個對象。

如果你不想使用order_by然後使用queryset.latest()

相關問題