使用通配符过滤模型对象
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")
我需要能够使用通配符进行过滤,例如:
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")