仅当查询中的列表计数大于0时应用筛选器

2024-03-28 10:00:38 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的例子中,我只想在filter(departments__in=depts)列表的计数大于0时应用depts。你知道吗

sites = Site.objects.for_user(request.user)\
            .filter(departments__in=depts)\
            .filter(archived=False)

除了用if-else包装整个块之外,在过滤器中还有更好的方法吗?你知道吗


Tags: infalse列表forobjectsrequestsitefilter
2条回答

您可以使用^{}。你知道吗

filter_params = ({'archived':False}, 
                 {'departments__in':depts,
                  'archived':False})[len(depts) > 0]

sites = Site.objects.for_user(request.user)\
            .filter(**filter_params)

您可以对if块中的查询应用额外的过滤器,在我看来,这使您的意图更加明确

sites = Site.objects.for_user(request.user).filter(archived=False)
if depts:
    sites = sites.filter(departments__in=depts)

相关问题 更多 >