Джанго Хейстек: поиск диапазона на MultiValueField - PullRequest
1 голос
/ 16 августа 2011

Мне было интересно, можно ли выполнить поиск по диапазону в MultiValueField. У меня есть модель, которая выглядит следующим образом:

Book
   Title = 'Awesome Book'
   Prices = [ Decimal('10.00'), Decimal('15.00'), Decimal('20.00') ]

Я индексирую поле цен с помощью MultiValueField, и я хотел бы иметь возможность сделать следующее:

sqs = SearchQueryResult()
sqs.filter(prices__gt=Decimal('10.00'), prices__lt=Decimal('20.00'))

Возможно ли это, или мне нужно использовать что-то еще для поиска диапазона по нескольким значениям?

Обновление:

Я забыл упомянуть, что __gt не работает, и я думаю, что это потому, что он индексирует его как список строк. Я нашел следующую ссылку , где они говорят о создании подклассов MultiValueField. Я попробовал это, но я не могу получить список десятичных чисел. Подклассный MultiValueFiled выглядит следующим образом:

class MultiValueDecimalField(fields.MultiValueField):
    field_type = 'decimal'

Ответы [ 3 ]

2 голосов
/ 16 августа 2011

Одним из способов решения этой проблемы является следующее:

sqs.filter(prices__in=['%.2f' % (x/100.00) for x in range(1000, 2000)])

Это очень уродливо, но работает.Тем не менее, открыт для другого ответа.

1 голос
/ 20 января 2012

То же самое: когда я применил фильтры __gte, __gt и т. Д., Я заметил, что SearchQuerySet возвращает неверные данные.Когда я изменил тип поля на FloatField, все стало работать правильно.выглядит как ошибка, или что-то

0 голосов
/ 12 февраля 2013

Вы пробовали поиск в поле диапазона?

SearchQuerySet().filter(view_count__range=[3, 5])

http://django -haystack.readthedocs.org / ен / последний / searchqueryset_api.html # полевые поиски

...