【问题标题】:Django queryset where a field values are in a list字段值在列表中的 Django 查询集
【发布时间】:2019-01-22 18:40:05
【问题描述】:

我需要进行一个查询,返回列表中存在 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"

我需要像 iexactin 混合的东西。

谢谢!

【问题讨论】:

    标签: python regex django django-queryset


    【解决方案1】:

    您需要分别添加正则表达式中指定的行首和行尾^$

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

    我发现str.format 更具可读性(对于 Python 3.6+,还请查看 f-strings):

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

    由于我们稍后不会提及捕获的组,因此我们可以使该组不捕获:

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

    【讨论】:

    • @PaulozOiOzuLLuFabrício 它正确构建了正则表达式。检查subject 字段值周围的任何空格。你也在用__iregex,对吧?
    • 是的!没关系!在问题中,我使用了字段主题,但在我的代码中,我需要字段类别,LOL。我改变了我的代码,它就像一个魅力!谢谢,伙计!
    • @PaulozOiOzuLLuFabrício 它发生了!很高兴我能帮忙:)
    猜你喜欢
    • 1970-01-01
    • 2012-01-26
    • 2018-10-11
    • 2017-08-29
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    相关资源
    最近更新 更多