

def filter_items(self, request, items):
    filter_map = {
        'ne': ('%(field)s__exact', True),
        'bn': ('%(field)s__startswith', True),
        'en': ('%(field)s__endswith', True),
        'nc': ('%(field)s__contains', True),
        'ni': ('%(field)s__in', True),
        'in': ('%(field)s__in', False),
        'eq': ('%(field)s__exact', False),
        'bw': ('%(field)s__startswith', False),
        'gt': ('%(field)s__gt', False),
        'ge': ('%(field)s__gte', False),
        'lt': ('%(field)s__lt', False),
        'le': ('%(field)s__lte', False),
        'ew': ('%(field)s__endswith', False),
        'cn': ('%(field)s__contains', False),
    }
    _filters = self.get_filters(request)
    if (_filters is None):
        return items
    q_filters = []
    for rule in _filters['rules']:
        (op, field, data) = (rule['op'], rule['field'], rule['data'])
        field_class = self.get_model()._meta.get_field_by_name(field)[0]
        if isinstance(field_class, models.related.RelatedField):
            op = 'eq'
        (filter_fmt, exclude) = filter_map[op]
        filter_str = smart_str((filter_fmt % {
            'field': field,
        }))
        if filter_fmt.endswith('__in'):
            d_split = data.split(',')
            filter_kwargs = {
                filter_str: data.split(','),
            }
        else:
            filter_kwargs = {
                filter_str: smart_str(data),
            }
        if exclude:
            q_filters.append((~ models.Q(**filter_kwargs)))
        else:
            q_filters.append(models.Q(**filter_kwargs))
    if (_filters['groupOp'].upper() == 'OR'):
        filters = reduce(operator.ior, q_filters)
    else:
        filters = reduce(operator.iand, q_filters)
    return items.filter(filters)

dataset/ETHPy150Open gerry/django-jqgrid/jqgrid.py JqGrid.filter_items/original