我需要能够使用通配符进行过滤,例如:
Surnames.objects.filter(surname="GR%FF%N")
应该返回具有以下姓氏的对象:GRIFFIN, GREFFTEN, GRAFFAIN,等等。现在很明显filter
不识别%
作为通配符,但上面的代码应该演示我需要做什么。我还希望限制返回结果的数量。你建议我怎么做呢?
您可以通过使用__regex
来使用正则表达式查找(Django-doc):
Surnames.objects.filter(surname__regex='^GR.*FF.*N$')
您可以通过切片查询集来限制结果的数量:
Surnames.objects.filter(surname__regex='^GR.*FF.*N$')[:20]
返回前20个结果。由于我们没有使用.order_by()
,它可以按任何顺序返回项。
在支持数据库的Django上有很多过滤方法。
对于通配符查询,您可以这样做:
Surnames.objects.filter(surname__icontain="YOUR QUERY TERM")
Surnames.objects.filter(surname__contain="YOUR QUERY TERM")
上面一个是区分大小写的,另一个是不区分大小写的
也有一些其他的查找,你可以帮助你完成你的工作:
startswith
endswith
istartswith
iendswith
也可以通过regex
查找的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")