summaryrefslogtreecommitdiff
path: root/commcrawler/lookups.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2019-07-30 20:19:11 +0200
committerÉtienne Loks <etienne@peacefrogs.net>2019-07-30 20:19:11 +0200
commit56a33989278a8fe2985f0d36d3c589136c1ec30d (patch)
treeb0cb3356e55b4547a4747e10411a8ca68852b977 /commcrawler/lookups.py
downloadComm-on-net-56a33989278a8fe2985f0d36d3c589136c1ec30d.tar.bz2
Comm-on-net-56a33989278a8fe2985f0d36d3c589136c1ec30d.zip
First commit
Diffstat (limited to 'commcrawler/lookups.py')
-rw-r--r--commcrawler/lookups.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/commcrawler/lookups.py b/commcrawler/lookups.py
new file mode 100644
index 0000000..f8d4897
--- /dev/null
+++ b/commcrawler/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]
+