python - 根据祖父母实例 id 查找重复项并根据时间戳字段过滤掉较旧的重复项
问题描述
我正在尝试根据祖父母实例 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)
但是,这感觉很hacky,我想这不是最佳解决方案。有没有更好的方法(更好的意思是更优化,即最小化查询集的评估次数等)?我可以对查询集的方法做同样的事情吗?
我的模型看起来像这样:
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):
…
解决方案
推荐阅读
- json - 无法在 swift 4.0 中将对象数组发布到 web api
- java - 当您必须替换许多片段状态时,保存片段状态的最佳实践方法是什么?
- reactjs - 反应useState钩子不更新状态onClick
- java - 如何使用 GregorianCalendar 在 Java 中获取当前周数和年份?
- android - android应用程序自动化的最佳方法
- css - 在反应中使用材料ui调用css类
- flutter - 我想把容器的一部分放在另一个容器上
- javascript - 在 Redux reducer 中合并具有相同键的数组对象元素
- python - Python PyGame 制作蛇游戏
- git - “git merge”——已经是最新的