예제 #1
0
    def _narrow_queryset(self, filter_list):
        '''
        Helper to narrow a queryset using a list of key-value tuples
        '''
        if not filter_list: return

        for field, value in filter_list:
            # Generally, django-haystack will use the correct _exact field
            # for filtering on facets, but for custom query facets it doesn't
            # so we just make sure that the _exact field is used.
            value = check_parse_date(value)
            value = self._solr_escape_value(value)
            field = '%s_exact' % field if self.indexed_fields[field].faceted else field
            self.queryset = self.queryset.narrow('%(field)s:%(value)s' % { 'field':field, 'value':value})
예제 #2
0
    def _narrow_queryset(self, filter_list):
        '''
        Helper to narrow a queryset using a list of key-value tuples
        '''
        if not filter_list: return

        for field, value in filter_list:
            # Generally, django-haystack will use the correct _exact field
            # for filtering on facets, but for custom query facets it doesn't
            # so we just make sure that the _exact field is used.
            value = check_parse_date(value)
            value = self._solr_escape_value(value)
            field = '%s_exact' % field if self.indexed_fields[
                field].faceted else field
            self.queryset = self.queryset.narrow('%(field)s:%(value)s' % {
                'field': field,
                'value': value
            })
예제 #3
0
 def _parse_date_facets(self, facet_items):
     '''
     Parse date faceted fields like:
         {'departure_dates': {'2010-04-24T18:17:03Z': 105,
                            '2010-05-01T00:00:00Z': 323,
                            '2010-06-01T00:00:00Z': 334,
                            '2010-07-01T00:00:00Z': 468,
                            '2010-08-01T00:00:00Z': 504,
                            '2010-09-01T00:00:00Z': 515,
                            '2010-10-01T00:00:00Z': 519,
                            '2010-11-01T00:00:00Z': 478,
                            '2010-12-01T00:00:00Z': 457,
                            '2011-01-01T00:00:00Z': 370,
                            '2011-02-01T00:00:00Z': 357,
                            '2011-03-01T00:00:00Z': 370,
                            '2011-04-01T00:00:00Z': 359,
                            'end': '2011-05-01T00:00:00Z',
                            'gap': '+1MONTH/MONTH'}}
     '''
     facets = []
     for field, date_counts in facet_items.iteritems():
         facet = Facet(field=field, label=field.replace('_', ' ').title())
         gap = date_counts['gap']
         for date_string, count in date_counts.iteritems():
             match = DATETIME_REGEX.search(date_string)
             if not match: continue
             data = match.groupdict()
             date = datetime_safe.date(int(data['year']),
                                       int(data['month']), int(data['day']))
             item = FacetItem(date, count)
             if gap == '+1MONTH/MONTH':
                 item.label = date.strftime("%B")
                 item.value = date.strftime("%Y-%m")
             elif gap == '+1YEAR/YEAR':
                 item.label = date.strftime("%Y")
                 item.value = date.strftime("%Y-01")
             item.is_selected = self._is_selected_facet(
                 field, check_parse_date(item.value))
             item.facet = facet
             facet.items.append(item)
         facet.items.sort(key=lambda x: x.value)
         facets.append(facet)
     return facets
예제 #4
0
 def _parse_date_facets(self, facet_items):
     '''
     Parse date faceted fields like:
         {'departure_dates': {'2010-04-24T18:17:03Z': 105,
                            '2010-05-01T00:00:00Z': 323,
                            '2010-06-01T00:00:00Z': 334,
                            '2010-07-01T00:00:00Z': 468,
                            '2010-08-01T00:00:00Z': 504,
                            '2010-09-01T00:00:00Z': 515,
                            '2010-10-01T00:00:00Z': 519,
                            '2010-11-01T00:00:00Z': 478,
                            '2010-12-01T00:00:00Z': 457,
                            '2011-01-01T00:00:00Z': 370,
                            '2011-02-01T00:00:00Z': 357,
                            '2011-03-01T00:00:00Z': 370,
                            '2011-04-01T00:00:00Z': 359,
                            'end': '2011-05-01T00:00:00Z',
                            'gap': '+1MONTH/MONTH'}}
     '''
     facets = []
     for field, date_counts in facet_items.iteritems():
         facet = Facet(field=field, label=field.replace('_', ' ').title())
         gap = date_counts['gap']
         for date_string, count in date_counts.iteritems():
             match = DATETIME_REGEX.search(date_string)
             if not match: continue
             data = match.groupdict()
             date = datetime_safe.date(int(data['year']), int(data['month']), int(data['day']))
             item = FacetItem(date, count)
             if gap == '+1MONTH/MONTH':
                 item.label=date.strftime("%B")
                 item.value=date.strftime("%Y-%m")
             elif gap == '+1YEAR/YEAR':
                 item.label=date.strftime("%Y")
                 item.value=date.strftime("%Y-01")
             item.is_selected = self._is_selected_facet(field, check_parse_date(item.value))
             item.facet = facet
             facet.items.append(item)
         facet.items.sort(key=lambda x: x.value)
         facets.append(facet)
     return facets