我需要进行查询,以返回列表中存在字段 subject 的所有行。我不区分大小写,但这些值应与列表中的值完全相同。
我正在使用:
my_list = ["Others", "Entertainment"]
results = MyObject.objects.filter(subject__iregex=r"(" + "|".join(my_list) + ")")
这是主题Django query case-insensitive list match的解决方案,但是结果是,我在其中包含以下行:
subject = "others tv series"
我只想要像这样的行
subject = "others"
我需要将 iexact 和 in 混合在一起。
谢谢!
答案 0 :(得分:1)
您需要分别在正则表达式^
和$
中添加行首和结尾:
subject__iregex=r"^(" + "|".join(my_list) + ")$"
我发现str.format
更具可读性(对于Python 3.6+,也请看f字符串):
'^({})$'.format('|'.join(my_list))
由于我们以后将不再引用捕获的组,因此可以使该组不捕获:
'^(?:{})$'.format('|'.join(my_list))