diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-08-02 19:29:11 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-08-02 19:29:11 +0200 |
commit | d9f590d29ffb4975a3c4f86dd2ae55cb753a2157 (patch) | |
tree | cf98515d86721212915cb6cb00cb41d8e3f9c574 /ishtar_common/lookups.py | |
parent | c319859f7127c5b196ba8cd9c03fd0f137e99e6a (diff) | |
download | Ishtar-d9f590d29ffb4975a3c4f86dd2ae55cb753a2157.tar.bz2 Ishtar-d9f590d29ffb4975a3c4f86dd2ae55cb753a2157.zip |
Admin - ishtar common: use ajax selects for some fields - clean and simplify
Diffstat (limited to 'ishtar_common/lookups.py')
-rw-r--r-- | ishtar_common/lookups.py | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/ishtar_common/lookups.py b/ishtar_common/lookups.py new file mode 100644 index 000000000..a031af9b3 --- /dev/null +++ b/ishtar_common/lookups.py @@ -0,0 +1,55 @@ +from ajax_select import register, LookupChannel + +from django.db.models import Q +from ishtar_common.models import Person, Organization, IshtarUser + + +@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"<span class='ajax-label'>%s</span>" % 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"<span class='ajax-label'>%s</span>" % 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"<span class='ajax-label'>%s</span>" % unicode(item.person) |