每组限制n个结果

每组限制n个结果

我正在尝试创建一个查询,在该查询中我可以拉出屏幕上显示的每个类别的最后3个论坛帖子。这是我的模型的设置方式:

class ForumCategory(models.Model):
    name = models.CharField(max_length=40)
    description = models.TextField()
    class_id = models.ForeignKey(Class)


class ForumPost(models.Model):
    name = models.CharField(max_length=100)
    details = models.TextField()
    author = models.ForeignKey(User)
    class_id = models.ForeignKey(Class)
    category = models.ForeignKey(ForumCategory)
    created_at = models.DateTimeField(auto_now_add=True)


我当前的查询一般返回3个最新帖子,而不是每个类别3个帖子:

categories = ForumCategory.objects.filter(class_id=class_id)
        forum_post = ForumPost.objects.filter(category_id__in=categories.values_list('id', flat=True)).order_by('-category_id')[:3]


因此,我首先获取属于特定类别的所有类别,然后列出这些类别以及每个类别中的3个最新帖子。

最佳答案

就像@exprator所说的,只是一个小小的变化,

categories = ForumCategory.objects.filter(class_id=class_id)
result_dict = {}
for cat in categories:
    forum_post = ForumPost.objects.filter(category__pk=cat.pk).order_by('-created')[:3]
    result_dict[cat.name] = forum_post


然后可以从相应的类别名称访问每个类别的查询集。

关于python - 每组限制n个结果-Django queryset,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43969046/

10-09 17:12