2

我在使用 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}

这仅在我运行测试时发生

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

我正在使用 django-hstore 1.2.1

PostgreSQL 9.4.4

我无法找出原因

4

1 回答 1

0

试图为您的问题找到解决方案,我不久前在django-hstore 组中发现了这个越来越多的讨论

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 的文档

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

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

于 2015-09-22T18:40:26.953 回答