2017-02-15 105 views
0

我想根據字段刪除查詢中的重複項。 我不想只得到值,但也是對象。 ORM需要根據哪一行將被刪除以及哪一行將被保留進行選擇。刪除基於特定字段的查詢中的重複

讓我們用這個例子:

name - date - value 
chris - 1/1/2012 - 12 
youssef - 1/02/2015 - 13 
trump - 1/8/2017 - 12 
chris - 1/12/2018 - 21 
trump - 1/03/2019 - 29 

輸出將是:

name - date - value 
trump - 1/03/2019 - 29 
chris - 1/12/2018 - 21 
youssef - 1/02/2015 - 13 

基本上,我想根據日期,以刪除重複的,像(它不工作) :

Table.objects.order_by('-date').distinct('name').order_by('-value') 

ORM可以處理這個查詢嗎?或者它應該寫一個函數?

+0

退房[此帖](http://stackoverflow.com /問題/ 6648545/django的查詢與 - 獨特和秩序逐)。它可能會提供一些洞察你想要做的事情。 – Neelik

+0

謝謝,但我無法用它來解決我的問題。 –

回答

0

我沒有找到任何使用ORM的解決方案。

解決我的問題的唯一辦法就是寫這個函數:

def remove_duplicate_based_on_date(query): 
    name_visited = [] 
    pk_to_be_deleted = [] 
    for object in query: 
     if not(object.name in name_visited): 
      name_visited += [object.name] 
     else: 
      pk_to_be_deleted += [object.id] 
    return pk_to_be_deleted 

,並使用它像這樣:

base_query = Table.objects.order_by('-created_at') 
pk_to_be_deleted = remove_duplicate_based_on_date(base_query) 
base_query.filter(id__in=pk_to_be_deleted).delete()