Django查询:从最新的许多是x?

时间:2014-03-04 06:52:58

标签: python django orm

说你的表用户(一):id和活动(很多):type,created_on,你如何得到最新活动的所有用户.type是'message'?

这是我到目前为止的查询:

User.objects.filter(activity__type='message').annotate(Max('activity__created_on'))

但它从那时起就没有了:

User.objects.filter(activity__type='message').annotate(Max('activity__created_on'))[0].activity.latest('created_on').type

不等于'message'。

1 个答案:

答案 0 :(得分:0)

我相信它不起作用,因为当你filter(activity__type='message') Django正在浏览该用户的所有活动并丢弃用户时,如果它的活动类型不是{{1}它不会丢弃活动

如果您正在使用PostgreSQL,您可以使用distinct并从User模型中获取字段,但不是实际的实例,但这可能足够您了:

message

如果您不使用PostgreSQL或需要完整的Activity.objects.order_by('user__username', 'created_on')\ .distinct('user__username')\ .filter(type='message')\ .values('user__username') 实例,则需要在Python中手动执行,例如:

User

哪个不理想,因为它意味着更多的查询。

希望有所帮助。