summaryrefslogtreecommitdiff
path: root/django/contrib/admin/views/main.py
diff options
context:
space:
mode:
authorAdrian Holovaty <adrian@holovaty.com>2006-08-18 02:48:34 +0000
committerAdrian Holovaty <adrian@holovaty.com>2006-08-18 02:48:34 +0000
commitefa19ae8a78d555e826dc7bbbfa1c20c3475e498 (patch)
tree6053a18d724ee40c2accb8fade0a3155dfb6193a /django/contrib/admin/views/main.py
parenteefe35c7fa88bffefdb0429cc315748e8ab85f11 (diff)
Fixed #2559 -- Added cool new operators for Admin.search_fields, plus documentation. Thanks, Andy Dustman.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@3601 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/contrib/admin/views/main.py')
-rw-r--r--django/contrib/admin/views/main.py12
1 files changed, 11 insertions, 1 deletions
diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py
index 0f6167fc8f..2f1e9722e1 100644
--- a/django/contrib/admin/views/main.py
+++ b/django/contrib/admin/views/main.py
@@ -711,9 +711,19 @@ class ChangeList(object):
qs = qs.order_by((self.order_type == 'desc' and '-' or '') + lookup_order_field)
# Apply keyword searches.
+ def construct_search(field_name):
+ if field_name.startswith('^'):
+ return "%s__istartswith" % field_name[1:]
+ elif field_name.startswith('='):
+ return "%s__iexact" % field_name[1:]
+ elif field_name.startswith('@'):
+ return "%s__search" % field_name[1:]
+ else:
+ return "%s__icontains" % field_name
+
if self.lookup_opts.admin.search_fields and self.query:
for bit in self.query.split():
- or_queries = [models.Q(**{'%s__icontains' % field_name: bit}) for field_name in self.lookup_opts.admin.search_fields]
+ or_queries = [models.Q(**{construct_search(field_name): bit}) for field_name in self.lookup_opts.admin.search_fields]
other_qs = QuerySet(self.model)
other_qs = other_qs.filter(reduce(operator.or_, or_queries))
qs = qs & other_qs