Skip to content

Commit b96b47c

Browse files
committed
Fixed a bug where set couldn't be used with __in. Thanks to Kronuz for the report!
1 parent d961d97 commit b96b47c

File tree

3 files changed

+11
-1
lines changed

3 files changed

+11
-1
lines changed

haystack/backends/solr_backend.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,7 @@ def build_query_fragment(self, field, filter_type, value):
372372
if hasattr(value, 'values_list'):
373373
value = list(value)
374374

375-
if not isinstance(value, (list, tuple)):
375+
if not isinstance(value, (set, list, tuple)):
376376
# Convert whatever we find to what pysolr wants.
377377
value = self.backend.conn._from_python(value)
378378

tests/solr_tests/tests/solr_query.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,11 @@ def test_build_query_in_filter_datetime(self):
7676
self.sq.add_filter(SQ(pub_date__in=[datetime.datetime(2009, 7, 6, 1, 56, 21)]))
7777
self.assertEqual(self.sq.build_query(), u'(why AND (pub_date:"2009-07-06T01:56:21Z"))')
7878

79+
def test_build_query_in_with_set(self):
80+
self.sq.add_filter(SQ(content='why'))
81+
self.sq.add_filter(SQ(title__in=set(["A Famous Paper", "An Infamous Article"])))
82+
self.assertEqual(self.sq.build_query(), u'(why AND (title:"A Famous Paper" OR title:"An Infamous Article"))')
83+
7984
def test_build_query_wildcard_filter_types(self):
8085
self.sq.add_filter(SQ(content='why'))
8186
self.sq.add_filter(SQ(title__startswith='haystack'))

tests/whoosh_tests/tests/whoosh_query.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,11 @@ def test_build_query_in_filter_datetime(self):
8282
self.sq.add_filter(SQ(pub_date__in=[datetime.datetime(2009, 7, 6, 1, 56, 21)]))
8383
self.assertEqual(self.sq.build_query(), u'(why AND (pub_date:"20090706015621"))')
8484

85+
def test_build_query_in_with_set(self):
86+
self.sq.add_filter(SQ(content='why'))
87+
self.sq.add_filter(SQ(title__in=set(["A Famous Paper", "An Infamous Article"])))
88+
self.assertEqual(self.sq.build_query(), u'(why AND (title:"A Famous Paper" OR title:"An Infamous Article"))')
89+
8590
def test_build_query_wildcard_filter_types(self):
8691
self.sq.add_filter(SQ(content='why'))
8792
self.sq.add_filter(SQ(title__startswith='haystack'))

0 commit comments

Comments
 (0)