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 """", line 1, in 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 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