2017-02-15 66 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()