我试图根据祖父母实例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):
…