summaryrefslogtreecommitdiff
path: root/commorganization/lookups.py
diff options
context:
space:
mode:
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
commitd2e3ce3fe1bca021190c8257367e8a444596724f (patch)
tree73d50da3dddea117777ecfeaad6926db0920b2c9 /commorganization/lookups.py
parent345a41be0318da980422ee74a67c363008d4de8d (diff)
downloadComm-on-net-d2e3ce3fe1bca021190c8257367e8a444596724f.tar.bz2
Comm-on-net-d2e3ce3fe1bca021190c8257367e8a444596724f.zip
Models refactoring
Diffstat (limited to 'commorganization/lookups.py')
-rw-r--r--commorganization/lookups.py49
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]
+