代码之家  ›  专栏  ›  技术社区  ›  martin_crd

Django中多个表的筛选和排序结果

  •  0
  • martin_crd  · 技术社区  · 7 年前

    我有两个模型页面和帖子,其中页面可以有多个帖子。用户每天将使用同一URL共享多篇帖子。因此,我需要每天获得最共享的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

    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}]>
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   bdoubleu    7 年前

    调查 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: