def save(self, force_insert=False, force_update=False, using=None, update_fields=None, auto_update_search=True): if auto_update_search and hasattr(self, 'fields_search'): search = '' for str_field in self.fields_search: fields = str_field.split('__') if len(fields) == 1: try: search += str(getattr(self, str_field)) + ' ' except: pass else: _self = self for field in fields: _self = getattr(_self, field) search += str(_self) + ' ' self.search = search self.search = normalize(self.search) return super(SaapSearchMixin, self).save(force_insert=force_insert, force_update=force_update, using=using, update_fields=update_fields)
def filter_search(self, queryset, value): query = normalize(value) query = query.split(' ') if query: q = Q() for item in query: if not item: continue q = q & Q(search__icontains=item) if q: queryset = queryset.filter(q) return queryset
def get_queryset(self, *args, **kwargs): request = self.request queryset = Trecho.objects.all() if request.GET.get('q') is not None: query = normalize(str(request.GET.get('q'))) query = query.split(' ') if query: q = Q() for item in query: if not item: continue q = q & Q(search__icontains=item) if q: queryset = queryset.filter(q) return queryset
def __init__(self, *args, **kwargs): super(ContatoFragmentSearchForm, self).__init__(*args, **kwargs) """q_field = FieldWithButtons( Field('q', placeholder=_('Filtrar Lista'), autocomplete='off'), StrictButton( _('Filtrar'), css_class='btn-default', type='button', onclick='atualizaContatos(event)'))""" self.fields['contatos_search'].widget = forms.CheckboxSelectMultiple() queryset = Contato.objects.filter( workspace=self.initial['workspace']).exclude( pk__in=self.initial['pks_exclude']) query = normalize(self.initial['q']) query = query.split(' ') if query: q = Q() for item in query: if not item: continue q = q & Q(search__icontains=item) if q: queryset = queryset.filter(q) queryset = queryset[:10] self.fields['contatos_search'].queryset = queryset self.fields['contatos_search'].choices = [(c.pk, c) for c in queryset] self.helper = FormHelper() self.helper.layout = Layout( Div(Field('contatos_search'), css_class='form-group-contatos-search')) self.helper.form_tag = False self.helper.disable_csrf = True
def save(self, force_insert=False, force_update=False, using=None, update_fields=None, auto_update_search=True): if auto_update_search and hasattr(self, "fields_search"): search = "" for str_field in self.fields_search: fields = str_field.split("__") if len(fields) == 1: try: search += str(getattr(self, str_field)) + " " except: pass else: _self = self for field in fields: _self = getattr(_self, field) search += str(_self) + " " self.search = search self.search = normalize(self.search) return super(SaapSearchMixin, self).save( force_insert=force_insert, force_update=force_update, using=using, update_fields=update_fields )
def get_queryset(self): queryset = CrudListView.get_queryset(self) # form_search_class # só pode ser usado em models que herdam de SaapSearchMixin if hasattr(self, 'form_search_class'): request = self.request if request.GET.get('q') is not None: query = normalize(str(request.GET.get('q'))) query = query.split(' ') if query: q = Q() for item in query: if not item: continue q = q & Q(search__icontains=item) if q: queryset = queryset.filter(q) list_field_names = self.list_field_names o = '1' if 'o' in self.request.GET: o = self.request.GET['o'] desc = '-' if o.startswith('-') else '' try: fields_for_ordering = list_field_names[ (abs(int(o)) - 1) % len(list_field_names)] if isinstance(fields_for_ordering, str): fields_for_ordering = [fields_for_ordering, ] ordering = () model = self.model for fo in fields_for_ordering: fm = model._meta.get_field(fo) if hasattr(fm, 'related_model') and fm.related_model: rmo = fm.related_model._meta.ordering if rmo: rmo = rmo[0] if not isinstance(rmo, str): rmo = rmo[0] fo = '%s__%s' % (fo, rmo) fo = desc + fo ordering += (fo,) model = self.model model_ordering = model._meta.ordering if model_ordering: if isinstance(model_ordering, str): model_ordering = (model_ordering,) for mo in model_ordering: if mo not in ordering: ordering = ordering + (mo, ) queryset = queryset.order_by(*ordering) except: pass if not self.request.user.is_authenticated(): return queryset if self.container_field: params = {} params[self.container_field] = self.request.user.pk queryset = queryset.filter(**params) return queryset
def get_queryset(self): queryset = DetailMasterCrud.ListView.get_queryset(self) pk = self.request.GET.get('pk', '') contatos = self.request.GET.get('contatos', '') numeros = self.request.GET.get('numeros', '') classificacoes = self.request.GET.getlist('classificacoes', '') status = self.request.GET.getlist('status', '') topicos = self.request.GET.getlist('topicos', '') assuntos = self.request.GET.getlist('assuntos', '') bairros = self.request.GET.getlist('bairros', '') importancias = self.request.GET.getlist('importancias', '') urgente = self.request.GET.get('urgente', '') endereco = self.request.GET.get('endereco', '') envolvidos = self.request.GET.get('envolvidos', '') data_envio_inicial = self.request.GET.get('data_envio_inicial', '') data_envio_final = self.request.GET.get('data_envio_final', '') data_protocolo_inicial = self.request.GET.get( 'data_protocolo_inicial', '') data_protocolo_final = self.request.GET.get( 'data_protocolo_final', '') data_abertura_inicial = self.request.GET.get( 'data_abertura_inicial', '') data_abertura_final = self.request.GET.get('data_abertura_final', '') data_retorno_inicial = self.request.GET.get( 'data_retorno_inicial', '') data_retorno_final = self.request.GET.get('data_retorno_final', '') data_solucao_inicial = self.request.GET.get( 'data_solucao_inicial', '') data_solucao_final = self.request.GET.get('data_solucao_final', '') if pk: queryset = queryset.filter(pk=pk) if urgente: if int(urgente) > 1: f = None if int(urgente) == 2: f = True elif int(urgente) == 3: f = False queryset = queryset.filter(urgente=f) if endereco: query = normalize(endereco) query = query.split(' ') if query: q = Q() for item in query: if not item: continue # Remove acentos dos campos que estão no banco q = q & Q(rua__unaccent__icontains=item) if q: queryset = queryset.filter(q) if envolvidos: query = normalize(envolvidos) query = query.split(' ') if query: q = Q() for item in query: if not item: continue q = q & (Q(orgao__icontains=item) | Q(instituicao__icontains=item)) if q: queryset = queryset.filter(q) if numeros: query = normalize(numeros) if query: q = Q() for item in query: if not item: continue q = q & (Q(materia_cam__icontains=item) | Q(oficio_cam__icontains=item) | Q(oficio_pref__icontains=item) | Q(oficio_orgao__icontains=item) | Q(proto_pref__icontains=item) | Q(proto_orgao__icontains=item)) if q: queryset = queryset.filter(q) if bairros: queryset = queryset.filter(bairro__in=bairros).distinct() if classificacoes: queryset = queryset.filter( classificacao__in=classificacoes).distinct() if assuntos: queryset = queryset.filter(assuntos__in=assuntos).distinct() if status: queryset = queryset.filter(status__in=status).distinct() if topicos: queryset = queryset.filter(topicos__in=topicos).distinct() if importancias: queryset = queryset.filter( importancia__in=importancias).distinct() if contatos: query = normalize(contatos) query = query.split(' ') if query: q = Q() for item in query: if not item: continue # Remove acentos dos campos que estão no banco q = q & ( Q(contatos__nome__unaccent__icontains=item) | Q(contatos__nome_social__unaccent__icontains=item) | Q(contatos__apelido__unaccent__icontains=item)) if q: queryset = queryset.filter(q) if data_envio_inicial: data = datetime.datetime.strptime(data_envio_inicial, "%d/%m/%Y").date() queryset = queryset.filter(data_envio__gte=data) if data_envio_final: data = datetime.datetime.strptime(data_envio_final, "%d/%m/%Y").date() queryset = queryset.filter(data_envio__lte=data) if data_abertura_inicial: data = datetime.datetime.strptime(data_abertura_inicial, "%d/%m/%Y").date() queryset = queryset.filter(data_abertura__gte=data) if data_abertura_final: data = datetime.datetime.strptime(data_abertura_final, "%d/%m/%Y").date() queryset = queryset.filter(data_abertura__lte=data) if data_solucao_inicial: data = datetime.datetime.strptime(data_solucao_inicial, "%d/%m/%Y").date() queryset = queryset.filter(data_solucao__gte=data) if data_solucao_final: data = datetime.datetime.strptime(data_solucao_final, "%d/%m/%Y").date() queryset = queryset.filter(data_solucao__lte=data) if data_retorno_inicial: data = datetime.datetime.strptime(data_retorno_inicial, "%d/%m/%Y").date() queryset = queryset.filter(data_retorno__gte=data) if data_retorno_final: data = datetime.datetime.strptime(data_retorno_final, "%d/%m/%Y").date() queryset = queryset.filter(data_retorno__lte=data) if data_protocolo_inicial: data = datetime.datetime.strptime(data_protocolo_inicial, "%d/%m/%Y").date() queryset = queryset.filter(data_protocolo__gte=data) if data_protocolo_final: data = datetime.datetime.strptime(data_protocolo_final, "%d/%m/%Y").date() queryset = queryset.filter(data_protocolo__lte=data) queryset = queryset.order_by('titulo') return queryset
def get_queryset(self): queryset = DetailMasterCrud.ListView.get_queryset(self) sexo = self.request.GET.get('sexo', '') pk = self.request.GET.get('pk', '') tem_filhos = self.request.GET.get('tem_filhos', '') ativo = self.request.GET.get('ativo', '') endereco = self.request.GET.get('endereco', '') num_endereco = self.request.GET.get('num_endereco', '') cep = self.request.GET.get('cep', '') telefone = self.request.GET.get('telefone', '') bairro = self.request.GET.getlist('bairro', '') municipio = self.request.GET.getlist('municipio', '') estado_civil = self.request.GET.get('estado_civil', '') nivel_instrucao = self.request.GET.get('nivel_instrucao', '') cargo = self.request.GET.get('cargo', '') dependente = self.request.GET.get('dependente', '') data_inicial = self.request.GET.get('data_inicial', '') data_final = self.request.GET.get('data_final', '') nasc_inicial = self.request.GET.get('nasc_inicial', '') nasc_final = self.request.GET.get('nasc_final', '') grupos = self.request.GET.getlist('grupos', '') dados_nulos = self.request.GET.getlist('dados_nulos', '') dados_nao_nulos = self.request.GET.getlist('dados_nao_nulos', '') tipo_autoridade = self.request.GET.getlist('tipo_autoridade', '') documentos = self.request.GET.get('documentos', '') if sexo: queryset = queryset.filter(sexo=sexo) if pk: queryset = queryset.filter(pk=pk) if tem_filhos: if int(tem_filhos) > 1: f = None if int(tem_filhos) == 2: f = True elif int(tem_filhos) == 3: f = False queryset = queryset.filter(tem_filhos=f) if ativo: if int(ativo) > 1: a = None if int(ativo) == 2: a = True elif int(ativo) == 3: a = False queryset = queryset.filter(ativo=a) if endereco: query = normalize(endereco) query = query.split(' ') if query: q = Q() for item in query: if not item: continue # Remove acentos dos campos que estão no banco q = q & (Q( endereco_set__endereco__unaccent__icontains=item ) | Q( endereco_set__ponto_referencia__unaccent__icontains =item ) | Q( endereco_set__complemento__unaccent__icontains=item )) if q: queryset = queryset.filter(q) if dados_nulos: for opcao in dados_nulos: if (opcao == 'DTN'): queryset = queryset.exclude( data_nascimento__isnull=False) elif (opcao == 'END'): queryset = queryset.exclude(endereco_set__isnull=False) elif (opcao == 'TEL'): queryset = queryset.exclude(telefone_set__isnull=False) elif (opcao == 'EML'): queryset = queryset.exclude(email_set__isnull=False) elif (opcao == 'SEX'): queryset = queryset.filter(sexo='') elif (opcao == 'ECV'): queryset = queryset.exclude(estado_civil__isnull=False) elif (opcao == 'GRP'): queryset = queryset.exclude( grupodecontatos_set__isnull=False) if dados_nao_nulos: for opcao in dados_nao_nulos: if (opcao == 'DTN'): queryset = queryset.exclude( data_nascimento__isnull=True) elif (opcao == 'END'): queryset = queryset.exclude(endereco_set__isnull=True) elif (opcao == 'TEL'): queryset = queryset.exclude(telefone_set__isnull=True) elif (opcao == 'EML'): queryset = queryset.exclude(email_set__isnull=True) elif (opcao == 'SEX'): queryset = queryset.filter(Q(sexo='M') | Q(sexo='F')) elif (opcao == 'ECV'): queryset = queryset.exclude(estado_civil__isnull=True) elif (opcao == 'GRP'): queryset = queryset.exclude( grupodecontatos_set__isnull=True) if documentos: q = Q() q = q & (Q(rg=documentos) | Q(cpf=documentos) | Q(cnpj=documentos) | Q(ie=documentos)) queryset = queryset.filter(q) if grupos: queryset = queryset.filter( grupodecontatos_set__in=grupos).distinct() if bairro: queryset = queryset.filter( endereco_set__bairro__in=bairro).distinct() if municipio: queryset = queryset.filter( endereco_set__municipio__in=municipio).distinct() if cep: queryset = queryset.filter(endereco_set__cep=cep) if num_endereco: queryset = queryset.filter(endereco_set__numero=num_endereco) if telefone: queryset = queryset.filter(telefone_set__telefone=telefone) if estado_civil: queryset = queryset.filter(estado_civil=estado_civil) if nivel_instrucao: queryset = queryset.filter(nivel_instrucao=nivel_instrucao) if tipo_autoridade: if tipo_autoridade[0] != '': queryset = queryset.filter( tipo_autoridade=tipo_autoridade[0]) if cargo: query = normalize(cargo) query = query.split(' ') if query: q = Q() for item in query: if not item: continue # Remove acentos dos campos que estão no banco q = q & (Q(cargo__unaccent__icontains=item) | Q(profissao__unaccent__icontains=item)) if q: queryset = queryset.filter(q) if dependente: query = normalize(dependente) query = query.split(' ') if query: q = Q() for item in query: if not item: continue # Remove acentos dos campos que estão no banco q = q & (Q(dependente_set__unaccent__icontains=item)) if q: queryset = queryset.filter(q) if data_inicial and data_final: now = datetime.datetime.strptime(data_inicial, "%d/%m/%Y").date() then = datetime.datetime.strptime(data_final, "%d/%m/%Y").date() if now > then: a = now now = then then = a # Build the list of month/day tuples. monthdays = [(now.month, now.day)] while now <= then: monthdays.append((now.month, now.day)) now += timedelta(days=1) # Transform each into queryset keyword args. monthdays = (dict( zip(("data_nascimento__month", "data_nascimento__day"), t)) for t in monthdays) # Compose the djano.db.models.Q objects together for a single query. query = reduce(operator.or_, (Q(**d) for d in monthdays)) # Run the query. queryset = queryset.extra( select={ 'month': 'extract( month from data_nascimento )', 'day': 'extract( day from data_nascimento )', }).order_by('month', 'day', 'nome').filter(query) if nasc_inicial: data = datetime.datetime.strptime(nasc_inicial, "%d/%m/%Y").date() queryset = queryset.filter(data_nascimento__gte=data) if nasc_final: data = datetime.datetime.strptime(nasc_final, "%d/%m/%Y").date() queryset = queryset.filter(data_nascimento__lte=data) queryset = queryset.order_by('nome') return queryset
def get_queryset(self): queryset = CrudListView.get_queryset(self) # form_search_class # só pode ser usado em models que herdam de SaapSearchMixin if hasattr(self, 'form_search_class'): request = self.request if request.GET.get('q') is not None: query = normalize(str(request.GET.get('q'))) query = query.split(' ') if query: q = Q() for item in query: if not item: continue q = q & Q(search__icontains=item) if q: queryset = queryset.filter(q) list_field_names = self.list_field_names o = '1' if 'o' in self.request.GET: o = self.request.GET['o'] desc = '-' if o.startswith('-') else '' try: fields_for_ordering = list_field_names[(abs(int(o)) - 1) % len(list_field_names)] if isinstance(fields_for_ordering, str): fields_for_ordering = [ fields_for_ordering, ] ordering = () model = self.model for fo in fields_for_ordering: fm = model._meta.get_field(fo) if hasattr(fm, 'related_model') and fm.related_model: rmo = fm.related_model._meta.ordering if rmo: rmo = rmo[0] if not isinstance(rmo, str): rmo = rmo[0] fo = '%s__%s' % (fo, rmo) fo = desc + fo ordering += (fo, ) model = self.model model_ordering = model._meta.ordering if model_ordering: if isinstance(model_ordering, str): model_ordering = (model_ordering, ) for mo in model_ordering: if mo not in ordering: ordering = ordering + (mo, ) queryset = queryset.order_by(*ordering) except: pass if not self.request.user.is_authenticated(): return queryset if self.container_field: params = {} params[self.container_field] = self.request.user.pk queryset = queryset.filter(**params) return queryset