当我尝试安装unaccent
Postgres扩展程序(通过postgresql-contrib
包)时,一切都按照以下方式运行:
# psql -U postgres -W -h localhost
Password for user postgres:
psql (9.3.9)
SSL connection (cipher: DHE-RSA-AES256-GCM-SHA384, bits: 256)
Type "help" for help.
postgres=# CREATE EXTENSION unaccent;
CREATE EXTENSION
postgres=# SELECT unaccent('Hélène');
unaccent
----------
Helene
(1 row)
然而,当我尝试使用Django 1.8时,我收到以下错误:
ProgrammingError: function unaccent(character varying) does not exist
LINE 1: ...able" WHERE ("my_table"."live" = true AND UNACCENT("...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
使用Postgresql 9.3和Django 1.8。
答案 0 :(得分:20)
需要手动制作并应用迁移文件。
首先,创建一个空迁移:
./manage.py makemigrations myapp --empty
然后打开文件并将UnaccentExtension
添加到operations
:
from django.contrib.postgres.operations import UnaccentExtension
class Migration(migrations.Migration):
dependencies = [
(<snip>)
]
operations = [
UnaccentExtension()
]
现在使用./manage.py migrate
。
如果您在最后一步中遇到以下错误:
django.db.utils.ProgrammingError: permission denied to create extension "unaccent"
HINT: Must be superuser to create this extension.
...然后通过执行postgres# ALTER ROLE <user_name> SUPERUSER;
及其NOSUPERUSER
对应方暂时允许用户拥有超级用户权限。 pgAdminIII也可以这样做。
现在使用Django享受无人机功能:
>>> Person.objects.filter(first_name__unaccent=u"Helène")
[<Person: Michels Hélène>]