django-hstore DictionaryField возвращает строку, а не словарь

Я испытываю немного странное поведение в моих тестовых случаях с django-hstore.

Я работаю над проектом django rest framework, и модели могут выглядеть следующим образом

модели

from django_hstore.hstore import DictionaryField

class Config(models.Model):

    data = data = DictionaryField(db_index=True)

И я пытаюсь протестировать сценарий на основе модели Config и делает что-то вроде этого

тесты

class ConfigTestCase(TestCase):

    def setUp(self):
        Config.objects.create(data={'pagination_number': '50'})

    def test_config_data(self):
        # Below code is getting failed
        Config.objects.first().data.get('pagination_number')

Когда я делаю Config.objects.first(). Data

я получаю "pagination_number"=>"50"

я ожидал {pagination_number': 50}

Это происходит только когда я запускаю тесты

Когда я выполняю операцию создания на моей командной оболочке вручную, все работает нормально, и код также выполняется нормально

Я использую django-hstore 1.2.1

PostgreSQL 9.4.4

Я не могу выяснить причину этого

1 ответ

Пытаясь найти решение вашей проблемы, я некоторое время назад нашел это растущее обсуждение в группе django-hstore.

Андрей Антух воспроизвел ошибку.

================================================== ====================
FAIL: test_properties_hstore (tests.django_hstore_tests.tests.HstoreTest)
-------------------------------------------------- --------------------
Traceback (most recent call last):
  File "/home/niwi/devel/django-hstore/tests/django_hstore_tests/tests.py", line 471, in test_properties_hstore
    self.assertEqual (type (instance.data), HStoreDict) # TEST FAILS HERE
AssertionError: <class 'str'> = <class 'django_hstore.fields.HStoreDict'>

если вы читаете документацию hstore:

1.4. Ограничения Реализация hstore в PostgreSQL не имеет понятия типа; он хранит отображение строковых ключей в строковые значения. Значения - это строки, хранящиеся в базе данных относительно их первоначального типа. Это ограничение может быть преодолено с помощью режима схемы, начиная с версии 1.3.0, или с помощью поля сериализованного словаря, начиная с версии 1.3.6 django_hstore.

Обновите версию django-hstore. это может решить проблему.

Другие вопросы по тегам