DRF正则表达式搜索

时间:2018-07-05 11:37:19

标签: python django django-rest-framework

我需要按一定顺序搜索并退回我的产品,并有一个正则表达式来处理搜索,问题是,我不确定如何将其应用于DRF search_filters中的搜索字段。

这是我想使用"^(?P<name>\w+ ?,?)"的正则表达式-任何以输入文本开头并且可能以空格或逗号结尾的名称。如果可能的话,我还想应用标记化排序,因此在“ ricenoodle”之前返回“ rice”,“ rice”和“ rice”。

我正尝试使用像search_fields = ['^(?P<name>\w+ ?,?)']这样的正则表达式,但我得到的只是一个类似Cannot resolve keyword '(?P<name>\w+ ?,?)$' into field的错误。

DRF指出,要使用正则表达式,我需要使用“ $ name”,并具有指向django文档的链接,该文档包含有关如何使用正则表达式(https://docs.djangoproject.com/en/2.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin.search_fields)构建搜索字段的0信息。

我应该如何构造search_fields

1 个答案:

答案 0 :(得分:0)

默认情况下,DRF将针对您的搜索字段返回不区分大小写的部分匹配,并且搜索参数可能包含多个搜索词,应将其用空格和/或逗号分隔。如果使用多个搜索词,则仅当所有提供的词都匹配时,对象才会在列表中返回。

  1. '^'从搜索开始。
  2. '='完全匹配。
  3. '@'全文搜索。 (目前仅支持Django的MySQL 后端。)
  4. '$'正则表达式搜索。

示例:

search_fields = ('=username', '=email')

您可以找到更多搜索模式以及如何使用here