summaryrefslogtreecommitdiff
path: root/django/contrib/admin/views
diff options
context:
space:
mode:
authorAdrian Holovaty <adrian@holovaty.com>2005-11-30 06:14:05 +0000
committerAdrian Holovaty <adrian@holovaty.com>2005-11-30 06:14:05 +0000
commit9541d7a7c70df6be8c8673789437c717b884e039 (patch)
tree442c6caa5e44a3d1cf850dadbebaef701543346f /django/contrib/admin/views
parent837435a08aaf35696e3adb4ece2229638f82da48 (diff)
Fixed #251 -- Added OR support to queries, via the new 'complex' DB API keyword argument. Updated docs and added unit tests. Also removed old, undocumented '_or' parameter. Thanks, Hugo.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@1508 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/contrib/admin/views')
-rw-r--r--django/contrib/admin/views/main.py12
1 files changed, 5 insertions, 7 deletions
diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py
index 089cc5381a..11a7b9ba47 100644
--- a/django/contrib/admin/views/main.py
+++ b/django/contrib/admin/views/main.py
@@ -216,19 +216,17 @@ class ChangeList(object):
break
lookup_params['order_by'] = ((order_type == 'desc' and '-' or '') + lookup_order_field,)
if lookup_opts.admin.search_fields and query:
- or_queries = []
+ complex_queries = []
for bit in query.split():
- or_query = []
+ or_queries = []
for field_name in lookup_opts.admin.search_fields:
- or_query.append(('%s__icontains' % field_name, bit))
- or_queries.append(or_query)
- lookup_params['_or'] = or_queries
-
+ or_queries.append(meta.Q(**{'%s__icontains' % field_name: bit}))
+ complex_queries.append(reduce(operator.or_, or_queries))
+ lookup_params['complex'] = reduce(operator.and_, complex_queries)
if opts.one_to_one_field:
lookup_params.update(opts.one_to_one_field.rel.limit_choices_to)
self.lookup_params = lookup_params
-
def change_list(request, app_label, module_name):
try:
cl = ChangeList(request, app_label, module_name)