diff options
-rw-r--r-- | ishtar_common/views.py | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py index ceb8db200..396f31a6f 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -271,7 +271,7 @@ def get_autocomplete_generic(model, extra=None): continue query = query & Q(label__icontains=q) limit = 20 - objects = model.objects.filter(query)[:limit] + objects = model.objects.filter(query).distinct()[:limit] get_label = lambda x: x.full_label() if hasattr(x, 'full_label') \ else str(x) data = json.dumps([{'id': obj.pk, 'value': get_label(obj)} @@ -590,11 +590,15 @@ def autocomplete_user(request): Q(first_name__icontains=q) | Q(last_name__icontains=q)) query = query & qu - users = models.User.objects.filter(query)[:limit] - data = json.dumps([ - {'id': user.pk, - 'value': str(user.ishtaruser)} - for user in users if user and user.ishtaruser]) + users = models.User.objects.filter(query).distinct()[:limit] + values = [] + for user in users: + try: + if user and user.ishtaruser: + values.append({'id': user.pk, 'value': str(user.ishtaruser)}) + except models.User.ishtaruser.RelatedObjectDoesNotExist: + pass + data = json.dumps(values) return HttpResponse(data, content_type='text/plain') @@ -613,7 +617,7 @@ def autocomplete_ishtaruser(request): Q(person__surname__icontains=q) | Q(person__raw_name__icontains=q)) query = query & qu - users = models.IshtarUser.objects.filter(query)[:limit] + users = models.IshtarUser.objects.filter(query).distinct()[:limit] data = json.dumps([ {'id': user.pk, 'value': str(user)} @@ -660,7 +664,7 @@ def autocomplete_person(request, person_types=None, attached_to=None, if not hasattr(request.user, 'ishtaruser'): return HttpResponse(json.dumps([]), content_type='text/plain') query &= models.Person.get_query_owns(request.user.ishtaruser) - persons = models.Person.objects.filter(query)[:limit] + persons = models.Person.objects.filter(query).distinct()[:limit] data = json.dumps([{'id': person.pk, 'value': str(person)} for person in persons if person]) return HttpResponse(data, content_type='text/plain') @@ -676,7 +680,7 @@ def autocomplete_department(request): extra = (Q(label__icontains=q) | Q(number__istartswith=q)) query = query & extra limit = 20 - departments = models.Department.objects.filter(query)[:limit] + departments = models.Department.objects.filter(query).distinct()[:limit] data = json.dumps([{'id': department.pk, 'value': str(department)} for department in departments]) return HttpResponse(data, content_type='text/plain') @@ -694,7 +698,7 @@ def autocomplete_town(request): extra |= Q(numero_insee__istartswith=q) query &= extra limit = 20 - towns = models.Town.objects.filter(query)[:limit] + towns = models.Town.objects.filter(query).distinct()[:limit] data = json.dumps([{'id': town.pk, 'value': str(town)} for town in towns]) return HttpResponse(data, content_type='text/plain') @@ -718,7 +722,7 @@ def autocomplete_advanced_town(request, department_id=None, state_id=None): if state_id: query = query & Q(departement__state__number__iexact=state_id) limit = 20 - towns = models.Town.objects.filter(query)[:limit] + towns = models.Town.objects.filter(query).distinct()[:limit] result = [] for town in towns: val = town.name @@ -743,12 +747,10 @@ def autocomplete_document(request): qu = Q(**{fields[0]: q}) for field in fields[1:]: qu |= Q(**{field: q}) - if not query: - query = qu - else: - query = query & qu + query = qu if not query else query & qu limit = 20 - items = models.Document.objects.filter(query)[:limit] + items = models.Document.objects.filter( + query).exclude(title="").distinct()[:limit] data = json.dumps([{'id': item.pk, 'value': str(item)} for item in items]) return HttpResponse(data, content_type='text/plain') @@ -788,7 +790,7 @@ def autocomplete_organization(request, orga_type=None): except (ValueError, ObjectDoesNotExist): pass limit = 15 - organizations = models.Organization.objects.filter(query)[:limit] + organizations = models.Organization.objects.filter(query).distinct()[:limit] data = json.dumps([{'id': org.pk, 'value': str(org)} for org in organizations]) return HttpResponse(data, content_type='text/plain') @@ -810,7 +812,7 @@ def autocomplete_author(request): Q(author_type__label__icontains=q) query = query & extra limit = 15 - authors = models.Author.objects.filter(query)[:limit] + authors = models.Author.objects.filter(query).distinct()[:limit] data = json.dumps([{'id': author.pk, 'value': str(author)} for author in authors]) return HttpResponse(data, content_type='text/plain') |