2017-02-26 96 views
0

过滤假设我有一个模型:Django的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 = ...)

回答

0

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

您可以通过__查询例如

User.objects.filter(posts__created=time) 

这将返回当前有帖子创建的用户的查询集。

请注意,time变量我用作一个例子是另一回事。例如,您可能想要使用posts__created_at__range来提供今天午夜到明天午夜的2元素元组。

+0

哦,对不起,我搞砸了一些相关的名字,忘记了日期字段。我现在修好了。 但你没有正确理解我。我不想按日期筛选用户,但是我需要序列化用户对象和按日期过滤的帖子。 – hopheylalaley

+0

你有没有试过我写的代码?我认为它会完全按照你所描述的内容进行 - 将返回在特定“创建”日期创建的帖子。按照你所说的按日期过滤'Users'将会通过'User.objects.filter(created = time)'来进行,而我在我的例子中使用了'posts__created = time'。如果我在这里错了,我将不得不要求你重新提出这个问题。 – McAbra