Проблема с тестами Django и триграммным сходством

У меня есть приложение Django, которое выполняет полнотекстовый поиск по базе данных. Представление, которое выполняет этот запрос, является моим search_view (я опускаю некоторые части для простоты). Оно просто получает результаты поиска на моей модели Post и отправляет в шаблон:

def search_view(request):
    posts = m.Post.objects.all()
    query = request.GET.get('q')

    search_query = SearchQuery(query, config='english')

    qs = Post.objects.annotate(
            rank=SearchRank(F('vector_column'), search_query) + TrigramSimilarity('post_title', query)
        ).filter(rank__gte=0.15).order_by('-rank'), 15
    )

    context = {
        results = qs
    }

    return render(request, 'core/search.html', context)

Приложение работает просто отлично. Проблема заключается в тесте, который я создал. Вот мой tests.py:

class SearchViewTests(TestCase):
    def test_search_without_results(self):
        """
        If the user's query did not retrieve anything
        show him a message informing that
        """
        response = self.client.get(reverse('core:search') + '?q=eksjeispowjskdjies')
        self.assertEqual(response.status_code, 200)
        self.assertContains(response.content, "We didn\'t find anything on our database. We\'re sorry")

Этот тест вызывает ProgrammingError исключение:

django.db.utils.ProgrammingError: function similarity(character varying, unknown) does not exist
LINE 1: ...plainto_tsquery('english'::regconfig, 'eksjeispowjskdjies')) + SIMILARITY...
                                                             ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

Я очень хорошо понимаю это исключение, потому что иногда получаю его. Функция SIMILARITY в Postgres принимает два аргумента, и оба должны быть типа TEXT. Исключение возникает потому, что второй аргумент (мой термин запроса) имеет тип UNKNOWN, поэтому функция не работает, и Django выдает исключение. И я не понимаю, почему, ведь на самом деле поиск работает! Даже в оболочке он работает отлично:

In [1]: from django.test import Client

In [2]: c = Client()

In [3]: response = c.get(reverse('core:search') + '?page=1&q=eksjeispowjskdjies')

In [4]: response
Out[4]: <HttpResponse status_code=200, "text/html; charset=utf-8">

Есть идеи, почему тест не работает, но фактическое выполнение приложения работает и консольный тест тоже работает?

Вернуться на верх