根据特定字段删除查询中的重复项

时间:2017-02-15 03:52:23

标签: django django-models django-orm

我想从基于字段的查询中删除重复项。 我不想只获取值而是获取对象。 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可以处理此查询吗?还是应该写一个函数?

1 个答案:

答案 0 :(得分:0)

我没有使用ORM找到任何解决方案。

解决我的问题的唯一方法是编写这个函数:

doc

并像这样使用它:

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