def ajax_filter(self, opts, *args, **kwargs):
# args = set()
# args.update((Q(field__isnull=True) | Q(field__name='none'),))
filter_field = opts.get('filter_field', None)
if isinstance(filter_field, tuple) and len(filter_field) == 2 and \
(filter_field[1] == 'exclude' or filter_field[1] == 'exclude_filter'):
return self.filter(*args, **kwargs)
if opts.get('selected_filter_index', -1) >= 0 and opts.get('selected_filter_values', None):
filter_field = opts['filter_field']
if isinstance(filter_field, str):
kwargs[filter_field + '__in'] = opts['selected_filter_values']
elif isinstance(filter_field, tuple) and len(filter_field) == 3:
kwargs[filter_field[0] + '__in'] = opts['selected_filter_values']
elif isinstance(filter_field, tuple) and len(filter_field) == 2 and filter_field[1] == 'date':
if opts['selected_filter_values'].get('min_date', None):
kwargs[filter_field[0] + '__gte'] = parse(opts['selected_filter_values']['min_date']).date()
if opts['selected_filter_values'].get('max_date', None):
kwargs[filter_field[0] + '__lte'] = parse(opts['selected_filter_values']['max_date']).date()
else:
raise ImproperlyConfigured('filter field attribute needs to be a string or tuple.')
if self.distinct_qs:
return self.filter(*args, **kwargs).distinct()
return self.filter(*args, **kwargs)
评论列表
文章目录