2017-02-26 106 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