根据祖父母实例ID查找重复项,并根据时间戳字段过滤出较旧的重复项

时间:2019-05-23 20:57:01

标签: python django duplicates django-queryset

我试图根据祖父母实例ID查找Django模型对象实例的重复项,并根据时间戳字段过滤掉较旧的重复项。

我想我可以使用distinct(*specify_fields)函数来做到这一点,但是我不使用Postgresql数据库(docs)。我设法通过以下代码实现了这一点:

queryset = MyModel.objects.filter(some_filtering…) \
    .only('parent_id__grandparent_id', 'timestamp' 'regular_fields'...) \
    .values('parent_id__grandparent_id', 'timestamp' 'regular_fields'...)

# compare_all_combinations_and_remove_duplicates_with_older_timestamps
list_of_dicts = list(queryset)
for a, b in itertools.combinations(list_of_dicts, 2):
    if a['parent_id__grandparent_id']: == b['parent_id__grandparent_id']:
        if a['timestamp'] > b['timestamp']:
            list_of_dicts.remove(b)
        else:
            list_of_dicts.remove(a)

但是,这感觉很棘手,我想这不是最佳解决方案。有没有更好的方法(更好的是,我的意思是更优化,即,最小化查询集的求值次数等)?我可以对queryset的方法做同样的事情吗?

我的模型如下所示:

class MyModel(models.Model):
    parent_id = models.ForeignKey('Parent'…
    timestamp = …
    regular_fields = …

class Parent(models.Model):
    grandparent_id = models.ForeignKey('Grandparent'…

class Grandparent(models.Model):
    …

0 个答案:

没有答案