Django queryset,其中字段值在列表中

时间:2018-08-15 20:52:50

标签: python regex django django-queryset

我需要进行查询,以返回列表中存在字段 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 混合在一起。

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要分别在正则表达式^$中添加行首和结尾:

subject__iregex=r"^(" + "|".join(my_list) + ")$"

我发现str.format更具可读性(对于Python 3.6+,也请看f字符串):

'^({})$'.format('|'.join(my_list))

由于我们以后将不再引用捕获的组,因此可以使该组不捕获:

'^(?:{})$'.format('|'.join(my_list))