Django:如果搜索空列表

发布于 2025-02-12 04:04:55 字数 822 浏览 0 评论 0原文

具有此代码序列:

queryset = self.filter(
            brand_id__in=(
                UserObjectPermission.objects.filter(
                    content_type=brand_ctype,
                    user=user,
                ).values_list('object_pk')
            )
        )

如果没有userObjectpermissign对象与过滤器content_type = brand_ctype,user = user =用户匹配,则最终结果将为空QUERYSET,因为Brand_ID __in将在[空QuerySet]中搜索。

但是我需要相反。如果此过滤器没有userObjectPermision对象(content_type = brand_ctype,user = user = user),则返回所有对象,即忽略此过滤器(

brand_id__in=(UserObjectPermission.objects.filter(
                    content_type=brand_ctype,
                    user=user,
                ).values_list('object_pk')
            )

我需要brand_id__in filter才能运行至少只有在QuerySet中的一个对象。

Having this code sequence:

queryset = self.filter(
            brand_id__in=(
                UserObjectPermission.objects.filter(
                    content_type=brand_ctype,
                    user=user,
                ).values_list('object_pk')
            )
        )

If there is no UserObjectPermission object that matches the filter content_type=brand_ctype, user=user then the end result will be empty queryset, because brand_id __in will search in [empty queryset].

But I need the reverse. If there is no UserObjectPermision object for this filter (content_type=brand_ctype, user=user) then return all objects, that is, ignore this filter (

brand_id__in=(UserObjectPermission.objects.filter(
                    content_type=brand_ctype,
                    user=user,
                ).values_list('object_pk')
            )

I need the brand_id__in filter to run only if there is at least one object in the queryset.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

彻夜缠绵 2025-02-19 04:04:55

您可以尝试(|)操作员

from django.db.models import Q, Exists

brands_qs = UserObjectPermission.objects.filter(
    content_type=brand_ctype,
    user=user,
).values_list('object_pk')

queryset = self.filter(
    Q(brand_id__in=brands_qs) | ~Exists(brands_qs)
)

you can try the OR (|) operator

from django.db.models import Q, Exists

brands_qs = UserObjectPermission.objects.filter(
    content_type=brand_ctype,
    user=user,
).values_list('object_pk')

queryset = self.filter(
    Q(brand_id__in=brands_qs) | ~Exists(brands_qs)
)
撑一把青伞 2025-02-19 04:04:55

您可以检查QuerySet是否包含任何项目:

brands = UserObjectPermission.objects.filter(
    content_type=brand_ctype,
    user=user,
).values_list('object_pk')

if brands:
    queryset = queryset.filter(brand_id__in=brands)

You can check if the queryset contains any items:

brands = UserObjectPermission.objects.filter(
    content_type=brand_ctype,
    user=user,
).values_list('object_pk')

if brands:
    queryset = queryset.filter(brand_id__in=brands)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文