【问题标题】:Filter Model Object using Wild-Chars使用通配符过滤模型对象
【发布时间】:2021-08-04 08:19:33
【问题描述】:

我需要能够使用通配符进行过滤,例如:

Surnames.objects.filter(surname="GR%FF%N")

应返回具有以下姓氏的对象:GRIFFIN、GREFFTEN、GRAFFAIN 等。现在显然filter 不承认% 是一个通配符,但上面的代码应该演示我需要做什么。我还希望限制返回的结果数量。你会如何建议我这样做?

【问题讨论】:

    标签: python django django-models django-orm


    【解决方案1】:

    您可以通过使用__regex lookup [Django-doc] 来处理正则表达式:

    Surnames.objects.filter(<b>surname__regex='^GR.*FF.*N$'</b>)

    您可以通过切片查询集来限制结果的数量:

    Surnames.objects.filter(surname__regex='^GR.*FF.*N$')[:20]

    因此,我们在这里返回前 20 个结果。由于我们没有使用.order_by(),它可以按任何顺序返回项目。

    【讨论】:

      【解决方案2】:

      有很多方法可以在支持您的数据库的 Django 上进行过滤。

      对于通配符查询,您可以这样做:

      Surnames.objects.filter(surname__icontain="YOUR QUERY TERM")
      Surnames.objects.filter(surname__contain="YOUR QUERY TERM")
      

      上面一个区分大小写,另一个不区分大小写

      还有一些其他查询可以帮助您完成工作:

      startswithendswithistartswithiendswith

      另外,您可以使用regex 查找通过正则表达式模式进行查询。

      下面我向您展示了如何完成工作:

      Surnames.objects.filter(surname__regex="YOUR REGEX PATTERN")
      Surnames.objects.filter(surname__startswith="YOUR QUERY TERM")
      Surnames.objects.filter(surname__iendswith="YOUR QUERY TERM")
      Surnames.objects.filter(surname__istartswith="YOUR QUERY TERM")
      

      【讨论】:

        猜你喜欢
        • 2013-06-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-16
        • 1970-01-01
        • 2012-11-15
        • 2021-05-02
        • 2015-04-16
        相关资源
        最近更新 更多