Ami*_*t P 6 api django django-rest-framework
为什么Django Rest Framework只支持MYSQL后端的全文搜索,当有更强大的数据库像Postgres时,我读了这个并且感到惊讶:/
http://www.django-rest-framework.org/api-guide/filtering
"@'全文搜索.(目前只支持Django的MySQL后端.)"
知道这背后的具体原因吗?
自@stalk回答后,情况发生了变化.从Django 1.10开始,Django Rest Framework也可以支持PostgreSQL.
并且由于django.contrib.postgres提供了与MySQL 相同的__search接口,您可以使用与MySQL相同的设置将API连接到Postgres:
django.contrib.postgres你的INSTALLED_APPS.在您的视图中,使用@符号标记全文搜索字段:
search_fields = ('@title', '@description')
Run Code Online (Sandbox Code Playgroud)事实上,听起来Django对MySQL的全文搜索支持已被弃用或至少在改变,根据@stalk原始答案中关于Django文档链接的弃用说明.该说明链接到以下说明,其中还包含用于替换它的示例代码:
不推荐使用仅支持MySQL且功能极为有限的搜索查找.将其替换为自定义查找...
我道歉,我没有足够的声誉发布额外的直接链接.
这是因为 django-rest-framework 使用 django 的__search.
从django-rest-framework master 中当前最新的提交来看:
def construct_search(self, field_name):
if field_name.startswith('^'):
return "%s__istartswith" % field_name[1:]
elif field_name.startswith('='):
return "%s__iexact" % field_name[1:]
elif field_name.startswith('@'):
return "%s__search" % field_name[1:]
else:
return "%s__icontains" % field_name
Run Code Online (Sandbox Code Playgroud)
django 文档讲述了__search(布尔全文搜索):
Note this is only available in MySQL and requires direct manipulation of the database
to add the full-text index. By default Django uses BOOLEAN MODE for full text searches.
See the MySQL documentation for additional details.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1840 次 |
| 最近记录: |