資料
| 姓名 | 資料1 | 資料2 | 創建日期 |
|---|---|---|---|
| 鋼鐵俠 | ia | 伊布 | 1630000000 |
| 綠巨人 | 哈 | 乙肝 | 1630000000 |
| 綠巨人 | 慧聰 | 高清 | 1630500000 |
| 隊長 | 鈣 | CB | 1630000000 |
| 隊長 | 抄送 | 光碟 | 1630500000 |
| 隊長 | ce | 比照 | 1630590000 |
我想獲取每個名稱的最新資料
| 姓名 | 資料1 | 資料2 | 創建日期 |
|---|---|---|---|
| 鋼鐵俠 | ia | 伊布 | 1630000000 |
| 綠巨人 | 慧聰 | 高清 | 1630500000 |
| 隊長 | ce | 比照 | 1630590000 |
像這樣
wish_data = [
{'name':'iron man', 'data1': 'ia', 'data2': 'ib', 'create_date':1630000000},
{'name':'hulk', 'data1': 'hc', 'data2': 'hd', 'create_date':1630500000},
{'name':'captain', 'data1': 'ce', 'data2': 'cf', 'create_date':1630590000},
]
我試過...
Model.objects.filter(**conditions).values_list('name').annotate(cdate=Max('create_date'))
=> [('iron man', 1630000000), ('hulk', 1630500000), ('captain', 1630590000)]>
但我需要其他列...
問
ORM有可能嗎?還是我必須用 for 和 if 陳述句撰寫邏輯?
例如
wish_data = []
for name, data1, data2, create_date in Model.objects.filter(**conditions).values_list('name', data1, data2, 'create_date').order_by('-create_date'):
if name not in data:
wish_data.append(
{
wish_data['name'] = name
wish_data['data1'] = data1
wish_data['data2'] = data2
wish_data['create_date'] = create_date
}
)
uj5u.com熱心網友回復:
對的,這是可能的。您可以在 django orm 查詢中使用distinct和order_by來獲取您的wish_data. 查詢將是這樣的:
distict_avengers = Model.objects.filter(**conditions).distinct("name").order_by("name", "-create_date").values("name", "data1", "data2", "create_date")
如果您愿意,print(distict_avengers)您將看到以下結果:
[
{"name": "captain", "data1": "ce", "data2": "cf", "create_date": 1630590000},
{"name": "hulk", "data1": "hc", "data2": "hd", "create_date": 1630500000},
{"name": "iron man", "data1": "ia", "data2": "ib", "create_date": 1630000000},
]
請注意,SQLite 不支持在欄位上使用不同的欄位,并且在使用distinct和order_by一起使用 中提到的欄位時order_by必須始終以 中提到的欄位開頭distinct。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/346389.html
