﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
3937	UnicodeEncodeError exception when using the filter method with LIKE operator and unicode strings	brunogola@…	Adrian Holovaty	"When i try to use objects.filter this way:

Participante.objects.filter(nome__contains=u""á"")

it returns this exception:
{{{
Traceback (most recent call last):
  File ""<console>"", line 1, in <module>
  File ""/usr/lib/python2.5/site-packages/django/db/models/query.py"", line 102, in __repr__
    return repr(self._get_data())
  File ""/usr/lib/python2.5/site-packages/django/db/models/query.py"", line 470, in _get_data
    self._result_cache = list(self.iterator())
  File ""/usr/lib/python2.5/site-packages/django/db/models/query.py"", line 174, in iterator
    select, sql, params = self._get_sql_clause()
  File ""/usr/lib/python2.5/site-packages/django/db/models/query.py"", line 484, in _get_sql_clause
    joins2, where2, params2 = self._filters.get_sql(opts)
  File ""/usr/lib/python2.5/site-packages/django/db/models/query.py"", line 648, in get_sql
    joins2, where2, params2 = val.get_sql(opts)
  File ""/usr/lib/python2.5/site-packages/django/db/models/query.py"", line 699, in get_sql
    return parse_lookup(self.kwargs.items(), opts)
  File ""/usr/lib/python2.5/site-packages/django/db/models/query.py"", line 831, in parse_lookup
    joins2, where2, params2 = lookup_inner(path, lookup_type, value, opts, opts.db_table, None)
  File ""/usr/lib/python2.5/site-packages/django/db/models/query.py"", line 1009, in lookup_inner
    params.extend(field.get_db_prep_lookup(lookup_type, value))
  File ""/usr/lib/python2.5/site-packages/django/db/models/fields/__init__.py"", line 173, in get_db_prep_lookup
    return [""%%%s%%"" % prep_for_like_query(value)]
  File ""/usr/lib/python2.5/site-packages/django/db/models/fields/__init__.py"", line 25, in <lambda>
    prep_for_like_query = lambda x: str(x).replace(""\\"", ""\\\\"").replace(""%"", ""\%"").replace(""_"", ""\_"")
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-2: ordinal not in range(128)
}}}

I don't know if it is a bug, BUT me and some guys from django-brasil have tried a lot of ways before changing django code, so...

Changing str() for unicode() in file ''django/db/models/fields/__init__.py'' line 25, solved the problem.

the patch (svn diff):

{{{
Index: __init__.py
 # prepares a value for use in a LIKE query
-prep_for_like_query = lambda x: str(x).replace(""\\"", ""\\\\"").replace(""%"", ""\%"").replace(""_"", ""\_"")
+prep_for_like_query = lambda x: unicode(x).replace(""\\"", ""\\\\"").replace(""%"", ""\%"").replace(""_"", ""\_"")
}}}

Sorry for my english... i'm from Brazil :)

Thanks,

Bruno Gola"		closed	Database layer (models, ORM)	other branch		fixed	unicode str unicode-branch		Accepted	1	0	1	1	0	0
