我有两个模型Page和Post,其中Page可以有多个帖子。用户将使用相同的URL每天共享多个帖子。因此,我需要每天获取最多共享网址的Feed,以及当天的帖子。有没有办法在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)
我最终得到了这个,它为我提供了最多的共享网址,但现在我无法弄明白如何获取所有相关帖子并按created_at
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}]>
答案 0 :(得分:0)
查看Prefetch()
和prefetch_related()
以返回相关对象的查询集。
您可以执行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: