1
我有這樣一個表:Django:如何做聚合(GroupBy ID)和最新的時間戳?
ID | Time Stamp
1 | 2012-07-28 18:57:48.160912+01
1 | 2012-07-28 20:57:43.063327+01
2 | 2012-07-28 21:17:16.016665+01
我希望看到每個ID的最新條目。
如果我這樣做,我只能得到一個對象與最新的條目:
open_deals = all_deals.latest('time_stamp'))
--> 2 | 2012-07-28 21:17:16.016665+01
但我想獲得
--> 1 | 2012-07-28 20:57:43.063327+01
2 | 2012-07-28 21:17:16.016665+01
我需要以某種方式聚合或GROUPBY的ID 。但是在文檔中沒有這個功能。
任何提示?謝謝
更新:
我曾嘗試以下解決方案:
result_list = [deal.dealchangelog_set.latest('time_stamp') for deal in open_deals]
result_set = set()
for item in result_list:
result_set.add(item.pk)
return open_deals.filter(pk__in = result_set)
可惜的是,你可以看到列表中仍然包含三個對象,而不是兩個。 :-(
這裏是我的模型(注意我沒有使用deal_id作爲pk)pk仍然是整數 在我的情況下,我需要得到最新的deal_id,這不是唯一的。 (爲簡單起見,我已經表明以前的UUID在這裏爲整數)
class Deal(models.Model):
deal_id = UUIDField()
status = models.ForeignKey(DealStatus, verbose_name=_(u"Deal Status"), null=True, blank=True)
contact = models.ForeignKey(Contact)
deal_type = models.ForeignKey(DealType)
class DealChangeLog(models.Model):
deal = models.ForeignKey(Deal)
time_stamp = CreationDateTimeField()
更新2:
def get_open_deals(call):
all_deals = Deal.objects.filter(contact=call.contact)
closed_deals = all_deals.filter(status__in=[5, 6])
closed_deal_list = []
if closed_deals:
for item in closed_deals:
closed_deal_list.append(item.deal_id)
open_deals = all_deals.exclude(deal_id__in=closed_deal_list)
result_list = [deal.dealchangelog_set.latest('time_stamp') for deal in open_deals]
result_set = set()
for item in result_list:
result_set.add(item.pk)
return open_deals.filter(pk__in = result_set)
,感謝您的解決方案。我試過了。但我需要結果作爲QuerySet而不是列表。那可能嗎? 'formset = deal_formset(queryset = get_latest_deals())' – Houman 2012-07-29 09:18:52
啊不用擔心,我已經想出瞭如何製作一個查詢集,但解決方案仍然無法正常工作。我發佈了更多信息。非常感謝 – Houman 2012-07-29 10:05:17
我已經將查詢結果添加爲查詢集,但是有沒有理由不能使用列表? – 2012-07-29 17:26:47