Django在一页中合并查询集

Posted

技术标签:

【中文标题】Django在一页中合并查询集【英文标题】:Django merge querysets in one page 【发布时间】:2021-01-24 00:27:59 【问题描述】:

在 django rest 框架中,我在模型上使用 20 的分页。 现在我想制作一个查询集,它需要 5 个项目,其中特色字段为真。 其他 15 个应该是特征字段为 false 的项目。

有人知道如何进行这项工作吗?

permission_classes = [AllowAny]
serializer_class = JobSerializer
pagination_class = Pagination

order_types = 
    1: 'job_order', #by randomized job order
    2: '-created_date', #newest to oldest
    3: 'created_date', #oldest to newest
    4: 'name', #by name A -> Z,
    5: '-name' #by name Z -> A,


def get_queryset(self):
 
    requirements = self.request.query_params.getlist('requirements', None)
    order_param = self.request.query_params.get('order_by', 1)

    #make querysets
    queryset_featured = Job.objects.all().filter(active=True, featured=True).order_by(self.order_types[int(order_param)])
    queryset_non_featured = Job.objects.all().filter(active=True, featured=False).order_by(self.order_types[int(order_param)])
    
   
    return queryset.distinct()

【问题讨论】:

您只想按精选内容排序? @JamesLin 我想做 2 个查询集,1 个有特色,1 个没有。 20 页的每一页我都希望有 5 个有特色,另外 15 个没有特色 【参考方案1】:

使用两个独立查询的联合:​​

https://docs.djangoproject.com/en/3.1/ref/models/querysets/#union

这将允许您使用 [0:5] 对特色项目进行一次 ORM 查询,然后与 [0:15] 联合到非特色项目的 ORM 查询。

我没有对此进行测试,但这是您的代码示例:

queryset_featured = Job.objects.all().filter(active=True, featured=True).order_by(self.order_types[int(order_param)])[0:5]
queryset_non_featured = Job.objects.all().filter(active=True, featured=False).order_by(self.order_types[int(order_param)])[0:15]
queryset_combined = queryset_featured.union(queryset_non_featured)

for row in queryset_combined:
    print(row)

【讨论】:

我很难理解如何用我自己的代码做到这一点:在上面添加了它。你能给我一个我必须在我的代码中编辑的示例吗? 试过了,还是不行。仍然是两者的混合......虽然我希望前 5 个有特色,其余的没有每个页面都有特色 下一步,我将在命令行中分别查看所有三个查询集(queryset_featuredqueryset_non_featuredqueryset_combined)的结果。希望这将为问题所在提供线索。 @FlipperPA 我认为他希望每个页面都显示 5 个特色和 15 个非特色,但不知何故要分页。 @FlipperPA 这就是我想要的,但我似乎无法让它工作

以上是关于Django在一页中合并查询集的主要内容,如果未能解决你的问题,请参考以下文章

在一页中堆叠 vuetify 元素

如何使 react-hook-form 在一页中使用多个表单?

如何从 laravel 分页的第一页中删除查询字符串页面?

word2007如何将4张图片均匀排版在一页中

flowplayer 在一页中的多搜索按钮

在一页中使用多颤动块