1
0
mirror of https://github.com/django/django.git synced 2025-10-26 15:16:09 +00:00

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
This commit is contained in:
Adrian Holovaty
2005-11-30 06:14:05 +00:00
parent 837435a08a
commit 9541d7a7c7
5 changed files with 182 additions and 8 deletions

View File

@@ -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)