首页 > 解决方案 > 测试值“本地”时,Django QuerySet 查找失败

问题描述

我有一个返回用户定义标签列表的 QuerySet。在某些情况下,我想排除任何以“本地”一词开头的标签,但这似乎给我带来了问题。

当我测试其他值(如下面的 HVAC)时,以下示例有效:

queryset = queryset.exclude(tags__tag__tag_name__icontains = 'HVAC')
queryset = queryset.exclude(tags__tag__tag_name__istartswith = 'HVAC')

但是当我尝试对“Local”进行相同操作时,它会排除所有内容,而不仅仅是包含或以“Local”一词开头的值。下面的两个示例都排除了所有内容:

queryset = queryset.exclude(tags__tag__tag_name__icontains = 'Local')
queryset = queryset.exclude(tags__tag__tag_name__istartswith = 'Local')

作为附加说明,以下内容确实有效,但它仅排除了该确切值,我无法预测/列出所有以“Local”开头的值:

queryset = queryset.exclude(tags__tag__tag_name = 'Local 123')

我最好的猜测是“Local”是python中的保留字?关于解决这个问题的任何想法,或者我还缺少什么?

标签: pythondjangodjango-queryset

解决方案


我不知道这是否是处理这个问题的正确方法,但由于每个@WillemVanOnsem 似乎我排除了所有至少有一个带有“Local”标签的模型对象(同时使用排除和据我所知过滤器),相反,我最终创建了一个包含所有不包含“Local”的值的新列表,并返回该列表而不是原始查询集。

newQueryset = list()

for item in list(queryset):
    if not 'local' in str(item['tags__tag__tag_name']).lower():
        newQueryset.append(item)

return newQueryset

推荐阅读