django - Django - 查询 CharFields 忽略变音符号
问题描述
在 Django 中有没有办法过滤一些CharField
/TextField
使用仅包含 ASCII 字符但匹配数据库中可能包含非 ASCII 字符的记录的字符串?
例如。我想用下面的代码找到一个name
设置为科隆的城市:
from django.db import models
class City(models.Model):
name = models.CharField(max_length=30)
City.objects.filter(name__<some lookup>='koln')
解决方案
所以,我的问题的答案实际上是unaccent
查找,因为我使用的是 PostgreSQL。以下是文档:https ://docs.djangoproject.com/en/2.2/ref/contrib/postgres/lookups/#unaccent
这个查找字段不能立即工作,第一个需要安装unaccent 扩展。
归功于这个答案- 简单的方法是创建空迁移并使用 Django 添加非重音扩展。
python manage.py makemigrations --empty <app_name>
然后在新的迁移文件中:
from django.db import migrations
from django.contrib.postgres.operations import UnaccentExtension
class Migration(migrations.Migration):
dependencies = [
('app_name', '<parent_migration>'),
]
operations = [
UnaccentExtension(),
]
现在我可以像这样进行所需的查询:
City.objects.filter(name__unaccent__iexact='koln')
它按预期工作:)