在 Django 中过滤和排序多个表的结果

Filter and sort results over multiple tables in Django

我有两个模型 Page 和 Post,其中 Page 可以有多个 Post。用户每天将与同一个 URL 共享多个 Post。因此,我需要获取每天分享最多 URL 的提要,以及当天的帖子。有没有办法在 Django ORM 中做到这一点?

class Page(models.Model):
    url = models.URLField()

class Post(models.Model):
    page = models.ForeignKey(‘Page', on_delete=models.DO_NOTHING, null=True, blank=True, related_name='posts')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

我最终得到了这个,它给了我最多的分享 URL 但现在我不知道如何获取所有相关的帖子并将它们按 created_at[=13 排序=]

Post.objects.filter(created_at__date=date.today()).values('page__id').annotate(num_shares=Count('page__id')).order_by('-num_shares')

<PostQuerySet [{'page__id': 2, 'num_shares': 6}, {'page__id': 1, 'num_shares': 5}]>

查看 Prefetch()prefetch_related() 到 return 相关对象的查询集。

你会做类似 pages = Page.objects.all().prefetch_related(Prefetch('post', queryset=Post.objects.filter(<date filter>), to_attr='posts'))

然后您将访问像

这样的页面帖子
for page in pages:
    for post in page.posts: