From 4c6ab1f2aa2a99d17ab308c0156f971a13d3fcaf Mon Sep 17 00:00:00 2001 From: adamb70 Date: Wed, 5 Feb 2020 01:51:13 +0000 Subject: [PATCH] Fixed #28528 -- Allowed combining SearchVectors with different configs. --- django/contrib/postgres/search.py | 2 +- tests/postgres_tests/test_search.py | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/django/contrib/postgres/search.py b/django/contrib/postgres/search.py index 000241ba24c..27862515483 100644 --- a/django/contrib/postgres/search.py +++ b/django/contrib/postgres/search.py @@ -56,7 +56,7 @@ class SearchVectorCombinable: ADD = '||' def _combine(self, other, connector, reversed): - if not isinstance(other, SearchVectorCombinable) or not self.config == other.config: + if not isinstance(other, SearchVectorCombinable): raise TypeError( 'SearchVector can only be combined with other SearchVector ' 'instances, got %s.' % type(other).__name__ diff --git a/tests/postgres_tests/test_search.py b/tests/postgres_tests/test_search.py index 068a4afe93a..89aa8c66624 100644 --- a/tests/postgres_tests/test_search.py +++ b/tests/postgres_tests/test_search.py @@ -297,6 +297,17 @@ class TestCombinations(GrailTestData, PostgreSQLTestCase): with self.assertRaisesMessage(TypeError, msg): Line.objects.filter(dialogue__search=None + SearchVector('character__name')) + def test_combine_different_vector_configs(self): + searched = Line.objects.annotate( + search=( + SearchVector('dialogue', config='english') + + SearchVector('dialogue', config='french') + ), + ).filter( + search=SearchQuery('cadeaux', config='french') | SearchQuery('nostrils') + ) + self.assertCountEqual(searched, [self.french, self.verse2]) + def test_query_and(self): searched = Line.objects.annotate( search=SearchVector('scene__setting', 'dialogue'),