diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-07-31 10:46:50 +0200 |
---|---|---|
committer | Étienne Loks <etienne@peacefrogs.net> | 2019-07-31 10:46:50 +0200 |
commit | d2e3ce3fe1bca021190c8257367e8a444596724f (patch) | |
tree | 73d50da3dddea117777ecfeaad6926db0920b2c9 /commorganization/lookups.py | |
parent | 345a41be0318da980422ee74a67c363008d4de8d (diff) | |
download | Comm-on-net-d2e3ce3fe1bca021190c8257367e8a444596724f.tar.bz2 Comm-on-net-d2e3ce3fe1bca021190c8257367e8a444596724f.zip |
Models refactoring
Diffstat (limited to 'commorganization/lookups.py')
-rw-r--r-- | commorganization/lookups.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/commorganization/lookups.py b/commorganization/lookups.py new file mode 100644 index 0000000..f8d4897 --- /dev/null +++ b/commorganization/lookups.py @@ -0,0 +1,49 @@ +from ajax_select import register, LookupChannel as BaseLookupChannel + +from django.db.models import Q + +from . import models + + +class LookupChannel(BaseLookupChannel): + def get_objects(self, items): + # TODO: why IDs are not given here? M2M issue + ids = [] + for item in items: + if hasattr(item, 'pk'): + ids.append(item.pk) + else: + ids.append(item) + return super(LookupChannel, self).get_objects(ids) + + def format_item_display(self, item): + return u"<span class='ajax-label'>%s</span>" % str(item) + + +@register('organization') +class OrganizationLookup(LookupChannel): + model = models.Organization + + def get_query(self, q, request): + query = Q() + for term in q.strip().split(' '): + subquery = Q(name__icontains=term) + query &= subquery + return self.model.objects.filter(query).order_by('name')[:20] + + +@register('area') +class AreaLookup(LookupChannel): + model = models.Area + + def get_query(self, q, request): + query = Q() + for term in q.strip().split(' '): + subquery = ( + Q(name__icontains=term) | + Q(parent__name__icontains=term) | + Q(reference=term) + ) + query &= subquery + return self.model.objects.filter(query).order_by('name')[:20] + |