我有一個Order模型和order_event模型。每個order_event都有一個可以訂購的外鍵。所以從一個訂單實例我可以得到:myorder.order_event_set
。我想獲得所有訂單的清單,但我希望它們按最後一次活動的日期排序。像這樣的聲明的工作原理是最新的事件日期排序:按照相關模型子集的最新實例對django queryset進行排序
queryset = Order.objects.all().annotate(
latest_event_date=Max('order_event__event_datetime')
).order_by('latest_event_date')
不過,我真正需要的是事件的子集的最新日期排序的所有訂單的列表。例如,我的事件分爲「調度」,「處理」等,所以我應該能夠獲得按最新調度事件排序的所有訂單的列表。這個Django文檔(https://docs.djangoproject.com/en/dev/topics/db/aggregation/#filter-and-exclude)顯示瞭如何使用過濾器獲取最新的計劃事件,但是這排除了沒有計劃的訂單事件。
我想我可以將過濾後的查詢集與包含缺少排定事件的那些訂單的查詢集合在一起......但我不太確定如何執行此操作。我看到與使用Python列表的答案,但它會更加有用有適當的Django的查詢集(即與分頁視圖等)
編輯回覆:意見/建議
class Order(models.Model):
desc = models.CharField(max_length=30)
class Order_event(models.Model):
order = models.ForeignKey(Order)
event_datetime = models.DateTimeField(auto_now_add = True)
而且,我不介意在多個聲明中這樣做。此外,排序等通過python而不是orm是可以的,因爲我沒有處理大量的數據集。如果可能的話,我寧願遠離SQL,因爲你提到的原因。組合單獨的排序查詢集似乎很有前途,但我陷入困境。
如果您提供相關型號,會更容易理解 – acjay
這些型號不是必需的,我完全理解您的要求。不知道是否可能,但不幸的是...至少不是純粹的ORM代碼。 – Greg