我設法從postgresql contrib安裝unaccent,但this answer that patches django沒有工作。 django.db.utils上的load_backend強制後端名稱以django.db.backends開頭。
是爲我工作在我的模塊之一,插入碼的解決方案:
from django.db.backends.postgresql_psycopg2.base import DatabaseOperations, DatabaseWrapper
def lookup_cast(self, lookup_type):
if lookup_type in('icontains', 'istartswith'):
return "UPPER(unaccent(%s::text))"
else:
return super(DatabaseOperations, self).lookup_cast(lookup_type)
def patch_unaccent():
DatabaseOperations.lookup_cast = lookup_cast
DatabaseWrapper.operators['icontains'] = 'LIKE UPPER(unaccent(%s))'
DatabaseWrapper.operators['istartswith'] = 'LIKE UPPER(unaccent(%s))'
print 'Unaccent patch'
patch_unaccent()
現在unaccent搜索工作正常,甚至裏面Django管理! 感謝您的回答!
如何將該文件夾用作數據庫後端?我應該把它放在usr/local/lib/python2.7/dist-packages/django/db/backends目錄下,或者我必須以某種方式聲明它? – Falcoa 2015-02-19 14:36:41
如果你不使用django 1.8,你可以簡單地在你的數據庫後端使用python虛線路徑 DATABASES = {「default」:{ 「ENGINE」:「my_app.my_backend_module」[...]}} – christophe31 2015-03-04 13:44:58
i 「已經添加在數據庫後端的蟒蛇點綴路徑,但有一個ImproperlyConfigured錯誤: 提高ImproperlyConfigured(ERROR_MSG) django.core.exceptions.ImproperlyConfigured:‘myAPP.backends.base’不是一個可用的後臺數據庫。 嘗試使用 'django.db.backends.XXX',其中XXX爲之一: u'mysql 'u'oracle',u'postgresql_psycopg2' ,u'sqlite3' 錯誤:沒有模塊指定基數 你知道該怎麼做才能解決這個錯誤? – Falcoa 2015-03-07 22:46:26