diff --git a/wagtail/search/backends/elasticsearch2.py b/wagtail/search/backends/elasticsearch2.py index e61035c0c..c758c227f 100644 --- a/wagtail/search/backends/elasticsearch2.py +++ b/wagtail/search/backends/elasticsearch2.py @@ -4,7 +4,7 @@ from urllib.parse import urlparse from django.db import DEFAULT_DB_ALIAS, models from django.db.models.sql import Query -from django.db.models.sql.constants import SINGLE +from django.db.models.sql.constants import MULTI from django.utils.crypto import get_random_string from elasticsearch import Elasticsearch, NotFoundError from elasticsearch.helpers import bulk @@ -340,8 +340,11 @@ class Elasticsearch2SearchQuery(BaseSearchQuery): if lookup == 'in': if isinstance(value, Query): db_alias = self.queryset._db or DEFAULT_DB_ALIAS - value = (value.get_compiler(db_alias) - .execute_sql(result_type=SINGLE)) + value = next(value.get_compiler(db_alias) + .execute_sql(result_type=MULTI)) + + value = [r[0] for r in value] + elif not isinstance(value, list): value = list(value) return { diff --git a/wagtail/search/tests/test_elasticsearch2_backend.py b/wagtail/search/tests/test_elasticsearch2_backend.py index 8fd6989b7..1f2fd22da 100644 --- a/wagtail/search/tests/test_elasticsearch2_backend.py +++ b/wagtail/search/tests/test_elasticsearch2_backend.py @@ -19,11 +19,6 @@ from .test_backends import BackendTests class TestElasticsearch2SearchBackend(BackendTests, ElasticsearchCommonSearchBackendTests, TestCase): backend_path = 'wagtail.search.backends.elasticsearch2' - # Broken - @unittest.expectedFailure - def test_filter_in_values_list_subquery(self): - super(TestElasticsearch2SearchBackend, self).test_filter_in_values_list_subquery() - # Broken @unittest.expectedFailure def test_order_by_non_filterable_field(self): diff --git a/wagtail/search/tests/test_elasticsearch5_backend.py b/wagtail/search/tests/test_elasticsearch5_backend.py index 4804d7818..513fc749c 100644 --- a/wagtail/search/tests/test_elasticsearch5_backend.py +++ b/wagtail/search/tests/test_elasticsearch5_backend.py @@ -23,11 +23,6 @@ class TestElasticsearch5SearchBackend(BackendTests, ElasticsearchCommonSearchBac def test_filter_isnull_true(self): super(TestElasticsearch5SearchBackend, self).test_filter_isnull_true() - # Broken - @unittest.expectedFailure - def test_filter_in_values_list_subquery(self): - super(TestElasticsearch5SearchBackend, self).test_filter_in_values_list_subquery() - # Broken @unittest.expectedFailure def test_order_by_non_filterable_field(self):