from ajax_select import register, LookupChannel from django.conf import settings from django.db.models import Q from ishtar_common.models import Person, Organization, IshtarUser, Town, Author @register('town') class TownLookup(LookupChannel): model = Town def get_query(self, q, request): if settings.COUNTRY == 'fr': query = Q() for term in q.strip().split(' '): query &= ( Q(name__icontains=term) | Q(numero_insee__icontains=term) ) else: query = Q(name__icontains=q) return self.model.objects.filter(query).order_by('name')[:20] def format_item_display(self, item): return u"%s" % unicode(item) @register('organization') class OrganizationLookup(LookupChannel): model = Organization def get_query(self, q, request): return self.model.objects.filter( name__icontains=q).order_by('name')[:20] def format_item_display(self, item): return u"%s" % unicode(item) @register('person') class PersonLookup(LookupChannel): model = Person def get_query(self, q, request): query = Q() for term in q.strip().split(' '): query &= ( Q(name__icontains=term) | Q(surname__icontains=term) | Q(email__icontains=term) | Q(attached_to__name__icontains=term)| Q(raw_name__icontains=term) ) return self.model.objects.filter(query).order_by('name')[:20] def format_item_display(self, item): return u"%s" % unicode(item) @register('author') class AuthorLookup(LookupChannel): model = Author def get_query(self, q, request): query = Q() for term in q.strip().split(' '): query &= ( Q(person__name__icontains=term) | Q(person__surname__icontains=term) | Q(person__raw_name__icontains=term) | Q(person__attached_to__name__icontains=term) | Q(author_type__label__icontains=term) ) return self.model.objects.filter(query).order_by('person__name')[:20] def format_item_display(self, item): return u"%s" % unicode(item) @register('ishtaruser') class UserLookup(LookupChannel): model = IshtarUser def get_query(self, q, request): query = Q() for term in q.strip().split(' '): query &= ( Q(user_ptr__username__icontains=term) | Q(person__name__icontains=term) | Q(person__surname__icontains=term) | Q(person__email__icontains=term) | Q(person__attached_to__name__icontains=term)| Q(person__raw_name__icontains=term) ) return self.model.objects.filter(query).order_by('person__name')[:20] def format_item_display(self, item): return u"%s" % unicode(item.person)