为django测试安装hstore扩展

时间:2018-03-08 08:18:18

标签: python django django-rest-framework django-testing django-tests

我正在尝试在运行django测试之前安装hstore扩展。为此,我已覆盖默认的 DiscoverRunner setup_databases 方法。

但是,未安装扩展程序&测试显示此错误 django.db.utils.ProgrammingError: type "hstore" does not exist

  

这是我的代码,以覆盖默认的发现跑步者。

settings.py

TEST_RUNNER = 'project.tests.CustomDiscovererRunner'

tests.py

from django.db import DEFAULT_DB_ALIAS, connections
from django.test.runner import DiscoverRunner

class CustomDiscovererRunner(DiscoverRunner):
    def setup_databases(self, **kwargs):

        result = super().setup_databases(**kwargs)

        connection = connections[DEFAULT_DB_ALIAS]
        cursor = connection.cursor()
        cursor.execute('CREATE EXTENSION IF NOT EXISTS HSTORE')

        return result

1 个答案:

答案 0 :(得分:0)

超级晚了,但是...对于新人们问同样的问题:

Django具有使用迁移创建扩展的功能(在测试之前执行),示例是HStore

https://docs.djangoproject.com/en/dev/ref/contrib/postgres/operations/#creating-extension-using-migrations

但是...

对于大多数扩展,这需要具有超级用户特权的数据库用户。如果Django数据库用户没有适当的权限,则必须在拥有Django迁移权限的用户之外的Django迁移范围内创建扩展。在这种情况下,连接到Django数据库并运行查询CREATE EXTENSION IF NOT EXISTS hstore;。