首页 > 解决方案 > 合并查询集时保留重复项(Django)

问题描述

    queryset = Profile.objects.none()
    for num in temp1:
        queryset |= Profile.objects.filter(subjects_key__contains='-'+str(num)+'-').exclude(user=self.request.user)

所以目前这段代码查询给定 temp1 数组中的每个值。本质上,我想构建一个动态或查询功能,而不管这个数组的长度如何。它运作良好,但唯一的问题是我想保留重复项,因为我需要稍后访问它们的计数。谢谢!

TLDR:合并查询集时如何保留重复项?

标签: djangodjango-queryset

解决方案


您可以使用.union(…)[Django-doc]。因此,您可以将其简化为:

from django.db.models import Q

qs = Profile.objects.none().union(
    *[Profile.objects.filter(
          ~Q(user=self.request.user),
          subjects_key__contains='-'+str(num)+'-'
    ) for num in tmp1],
    all=True
)

正如文档所说:

要允许重复值,请使用all=True参数。


推荐阅读