django-hstore DictionaryField返回字符串而不是字典

时间:2015-09-22 18:15:14

标签: django postgresql django-rest-framework django-hstore

我正在使用django-hstore对我的测试用例进行一些奇怪的行为。

我正在开发一个django rest框架项目,模型可能如下所示

模型

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}

只有在我运行测试

时才会发生这种情况

当我在我的命令shell上手动执行创建操作时,一切正常,代码也可以正常执行

我正在使用django-hstore 1.2.1

PostgreSQL 9.4.4

我无法弄清楚这个

的原因

1 个答案:

答案 0 :(得分:0)

试图找到问题的解决方案,我最后在django-hstore group

中找到了这个不断增加的讨论。

Andrey Antukh 转载了错误。

================================================== ====================
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的documentation

  

1.4。限制PostgreSQL的hstore实现没有类型的概念;它存储字符串键到字符串值的映射。值   是存储在数据库中的字符串关于它们的原始类型。   可以通过使用模式模式克服此限制   版本1.3.0或使用序列化字典字段   django_hstore的1.3.6版。

更新django-hstore的版本。这个也许解决了这个问题。