summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/views.py38
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')