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. это может решить проблему.