2016-05-13 1 views
2

Я использую HstoreField в одной из своих моделей, и когда я пытаюсь ее протестировать, я получил ошибку psycopg2.ProgrammingError: ERROR: function hstore(integer[], text[]) does not exist. Если я правильно понял эту проблему, это произошло потому, что расширение hstore не было настроено в базе данных, как это было сделано при миграции, добавив операцию HStoreExtension (documentation).Работа с HstoreField в тестах django

Как настроить расширение hstore в базе данных тестов по умолчанию и решить мою проблему?

+0

У вас есть миграция, которая устанавливает расширение? У вас есть зависимости, чтобы они выполнялись до любых миграций, которые создают «HStoreField»? – Alasdair

+0

@Alasdair Да, расширение hstore было установлено в файле миграции 12-го приложения 15, и все работает нормально, но тесты. И мне жаль, но я не понял второго вопроса, что вы имеете в виду под зависимостями? – DiA

+0

Постараюсь объяснить по-другому. Один (или более) из ваших моделей использует «HStoreField». Если миграция, которая создает первый «HStoreField», - это миграция 13 или более, это нормально, потому что расширение установлено в миграции 12. Если, например, миграция 10 создает первый «HStoreField», тогда у вас есть проблема, потому что расширение isn ' t, установленный к этому моменту. – Alasdair

ответ

2

Благодаря Simon Charette, которые отвечают на этот вопрос: django-users

Из исключения это выглядит как проблема не связана с отсутствующим расширением но от попытки использования и целого в качестве ключа. например

instance.hstore_field = {1: 'foo'} вместо instance.hstore_field = {'1': 'foo'}

ключей и значений в hstore в PostgreSQL просто текстовые строки (docs) и Django не преобразовывают ключевой объект в строку. Поэтому мое предположение HStoreExtension было неправильным способом ...