使用通配符过滤模型对象

Filter Model Object using Wild-Chars

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

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

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

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

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

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

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

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

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

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

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

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

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

startswith endswith istartswith iendswith

此外,您可以使用 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")