Похоже, что ваша проблема на самом деле связана с подстановкой строк в Python. Чтобы построить окончательную строку запроса, Django делает что-то вроде:
self.sql % self.params
Здесь используется% -форматирование старого стиля, которое хочет интерпретировать ваш %>
как механизм подстановки строк, аналогично %s
, но это недопустимая комбинация. Чтобы создать символ %
в форматированной строке, вам просто нужно использовать %%
во входной строке, например:
In [1]: MyModel.objects.raw('SELECT * FROM myapp_mymodel WHERE myfield %%> %s', ['test'])
Out[1]: <RawQuerySet: SELECT * FROM myapp_mymodel WHERE myfield %> test>
...
Кстати, у Django есть документация по основному использованию pg_trgm
без необходимости прибегать к необработанным строкам запроса. Просто убедитесь, что у вас есть миграция, которая сначала активирует расширение:
В дополнение к поиску trigram_similar
вы можете использовать несколько других выражений.
Чтобы использовать их, вам нужно активировать расширение pg_trgm
на PostgreSQL.
Вы можете установить его с помощью операции миграции TrigramExtension
.