Created
September 23, 2016 16:48
-
-
Save JonnatasCabral/b0bf23f092f10c3a9d778d724d8995bb to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| from datetime import datetime | |
| from datetime import timedelta | |
| class FilterMixin(object): | |
| filter_fields = [] | |
| data_field = None | |
| def set_filters(self): | |
| """ | |
| implementar funcao que retorne uma lista de tuplas com | |
| [(nomedofiltro, dict_or_list de escolhas), ]. | |
| E para vizualizar esses filtros use: | |
| o 'load filters' e use a tag 'filter' | |
| """ | |
| return [] | |
| def get_context_data(self, **kwargs): | |
| context = super(FilterMixin, self).get_context_data(**kwargs) | |
| context['filters'] = self.set_filters() | |
| context['data_field'] = self.data_field | |
| kwargs = self.request.GET.dict() | |
| context.update(kwargs) | |
| return context | |
| def remove_blank_arg(self, dic): | |
| new_dic = {} | |
| for k, v in dic.items(): | |
| if v != '': | |
| new_dic.update({k: v}) | |
| return new_dic | |
| def get_queryset(self): | |
| queryset = super(FilterMixin, self).get_queryset() | |
| # pega os kwargs dos filtros e remove os com value='' | |
| request_kwargs = self.request.GET.dict() | |
| request_kwargs = self.remove_blank_arg(request_kwargs) | |
| request_args_keys = set(list(request_kwargs.keys())) | |
| # os campos a serem filtrados estao definidos em: {filter_fields} | |
| intersec = request_args_keys.intersection(self.filter_fields) | |
| # filtro por range de data | |
| data_ini = request_kwargs.get('data_ini') | |
| data_fim = request_kwargs.get('data_fim') | |
| if data_ini and data_fim: | |
| request_kwargs.pop('data_ini') | |
| request_kwargs.pop('data_fim') | |
| # É obrigado definir o campo do modelo que filtrará por data | |
| data_field = None | |
| if self.data_field: | |
| data_field = getattr(self.model, self.data_field) | |
| if data_ini and data_fim and data_field: | |
| data_ini = datetime.strptime(data_ini, '%d/%m/%Y') | |
| data_fim = datetime.strptime(data_fim, '%d/%m/%Y') | |
| queryset = queryset.filter(**{ | |
| self.data_field + '__range': (data_ini, data_fim) | |
| }) | |
| if len(intersec) > 0: | |
| return queryset.filter(**request_kwargs) | |
| return queryset |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment