拥有以下代码序列:
queryset = self.filter(
brand_id__in=(
UserObjectPermission.objects.filter(
content_type=brand_ctype,
user=user,
).values_list('object_pk')
)
)
如果没有UserObjectPermission对象匹配过滤器content_type=brand_ctype, user=user
,那么最终结果将是空queryset,因为brand_id __in将在[empty queryset]中搜索。
但我需要相反的。如果此过滤器(content_type=brand_ctype, user=user
)没有userobjectpermission对象,则返回所有对象,即忽略此过滤器(
brand_id__in=(UserObjectPermission.objects.filter(
content_type=brand_ctype,
user=user,
).values_list('object_pk')
)
我需要brand_id__in过滤器只有在查询集中至少有一个对象时才运行。
您可以尝试使用OR (|
)运算符
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)
)
您可以检查查询集是否包含任何项:
brands = UserObjectPermission.objects.filter(
content_type=brand_ctype,
user=user,
).values_list('object_pk')
ifbrands:
queryset = queryset.filter(brand_id__in=brands)