from django import shortcuts from django.http import Http404 from django.db.models import Q from django.contrib.auth.models import User from gestioncof.models import CofProfile, Clipper def autocomplete(request): if "q" not in request.GET: raise Http404 q = request.GET['q'] data = { 'q': q, } queries = {} bits = q.split() queries['members'] = CofProfile.objects.filter(Q(is_cof=True)) queries['users'] = User.objects.filter(Q(profile__is_cof=False)) queries['clippers'] = Clipper.objects for bit in bits: queries['members'] = queries['members'].filter( Q(user__first_name__icontains=bit) | Q(user__last_name__icontains=bit) | Q(user__username__icontains=bit) | Q(login_clipper__icontains=bit)) queries['users'] = queries['users'].filter( Q(first_name__icontains=bit) | Q(last_name__icontains=bit) | Q(username__icontains=bit)) queries['clippers'] = queries['clippers'].filter( Q(fullname__icontains=bit) | Q(username__icontains=bit)) queries['members'] = queries['members'].distinct() queries['users'] = queries['users'].distinct() usernames = list(queries['members'].values_list('login_clipper', flat='True')) \ + list(queries['users'].values_list('profile__login_clipper', flat='True')) queries['clippers'] = queries['clippers'] \ .exclude(username__in=usernames).distinct() # add clippers data.update(queries) options = 0 for query in queries.values(): options += len(query) data['options'] = options return shortcuts.render(request, "autocomplete_user.html", data)