Django ORM - 过滤相关对象

时间:2017-02-26 22:31:24

标签: python django performance orm

假设我有一个模型:

class Post(models.Model):
    user = models.ForeignKey(User, related_name='posts')
    created = models.DateTimeField(auto_now_add=True)

我想查询所有用户,并列出每个用户的今日帖子。

以下是一些很好的解决方案,例如使用模型方法或迭代每个用户,但在我看来,它们并没有真正具有良好的性能,因为它们不使用ORM。 也许有任何方式像User.objects.all().annotate(filtered_posts = ...)

1 个答案:

答案 0 :(得分:0)

你说你想查询"今天的帖子"但是我没有看到日期时间段,所以我假设一个。此外,您需要更改相关名称(它从其他模型角度描述名称,因此:related_name='posts'更合适。)

您可以在__查询时访问相关对象,例如

User.objects.filter(posts__created=time) 

这将返回包含今天发布的帖子的用户的查询集。

请注意,我用作示例的time变量是另一回事。例如,您可能希望使用posts__created_at__range提供今天午夜至明天午夜的2元素元组。