Django 相当于每个用户的最新条目

标签 django

我很惊讶这个问题还没有出现。在网上找不到太多。

使用 Entry.objects.latest('created_at')我可以恢复所有 Entry 对象的最新条目,但是说我是否想要每个用户的最新条目?这类似于 SQL 最新记录查询。但是我如何使用 ORM 实现这一点?这是我的方法,我想知道这是否是做我想做的最有效的方法。

首先,我执行一个子查询:对象按用户分组,并为每个用户返回 Max(最新)created_by 字段 (created_at__max) 然后我根据子查询中的结果过滤 Entry 对象并获取所需的对象。

Entry.objects.filter(created_at__in=Entry.objects.values('user').annotate(Max('created_at')).values_list('created_at__max'))

或使用经理:
class UsersLatest(models.Manager):  

    def get_query_set(self):
        return super(UsersLatest,self).get_query_set().filter(created_at__in=self.model.objects.values('user').annotate(Max('created_at')).values_list('created_at__max'))

有没有更有效的方法?可能没有子查询?

谢谢,

保罗

最佳答案

使用 order_bydistinct :

Entry.objects.all().order_by('user', 'created_at').distinct('user')

然后为了提​​高性能,在 'user' 和 'created_at' 字段上添加索引。

但我认为真正的生产方式是使用 Redis缓存和更新用户最新条目的 id 列表。

关于Django 相当于每个用户的最新条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2577914/

相关文章:

python - 为什么 Python 脚本在 CLI 中运行,但在从 cron 作业调用时却不行?

python - 自定义用户模型 Django 错误,没有这样的表

django - Elasticsearch DSL添加外键

python - 使用 Django,如何将模型的 ForeignKey 添加到 CreateView?

python - Django 表单的 NoReverseMatch

python - 在 Django 模型中存储电话号码的最佳方式是什么?

python - 由于模型和数据库不同,无法使用 South 进行迁移

python - Django:使用外键保存动态表单

Django 和 MPTT - 只获取叶节点

Python:将字符串时间字典转换为日期时间