Opened 19 years ago
Closed 19 years ago
#3412 closed (fixed)
Search unicode string in DB
| Reported by: | Owned by: | Adrian Holovaty | |
|---|---|---|---|
| Component: | Forms | Version: | dev |
| Severity: | Keywords: | unicode | |
| Cc: | Triage Stage: | Accepted | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | yes | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
I try to search records in my DB and the information I give contains non-ascii characters. I used __icontains for the search. This leads to a unicode error in django.
This is the View that is used to search into DB:
def search_entreprise(request):
form = EntrepriseSearchForm()
if request.method=='POST':
new_data = request.POST.copy()
form = EntrepriseSearchForm(new_data)
if form.is_valid():
data = form.clean_data
entreprise_list = Entreprise.objects.all()
if data['domaine']:
entreprise_list=entreprise_list.filter(domaine=data['domaine'])
if data['entrepriseMere']:
entreprise_list=entreprise_list.filter(entrepriseMere=data['entrepriseMere'])
if data['nom']:
entreprise_list=entreprise_list.filter(nom__icontains=data['nom'])
return render_to_response('stagesECL/entreprise_list.html',{'list':entreprise_list,})
return render_to_response('stagesECL/entreprise_search.html',{'form':form,})
where in this case the only information given is the entreprise name (nom) which had the value "hé".
Here is the error I get:
UnicodeEncodeError at /entreprise/search/ 'ascii' codec can't encode character u'\xe9' in position 1: ordinal not in range(128) Request Method: POST Request URL: http://localhost/entreprise/search/ Exception Type: UnicodeEncodeError Exception Value: 'ascii' codec can't encode character u'\xe9' in position 1: ordinal not in range(128) Exception Location: c:\Python25\lib\site-packages\django\db\models\fields\__init__.py in , line 25
And finally this is the backtrace:
Traceback (most recent call last):
File "c:\Python25\lib\site-packages\django\template\__init__.py" in render_node
712. result = node.render(context)
File "c:\Python25\lib\site-packages\django\template\defaulttags.py" in render
100. len_values = len(values)
File "c:\Python25\lib\site-packages\django\db\models\query.py" in __len__
100. return len(self._get_data())
File "c:\Python25\lib\site-packages\django\db\models\query.py" in _get_data
430. self._result_cache = list(self.iterator())
File "c:\Python25\lib\site-packages\django\db\models\query.py" in iterator
171. select, sql, params = self._get_sql_clause()
File "c:\Python25\lib\site-packages\django\db\models\query.py" in _get_sql_clause
444. joins2, where2, params2 = self._filters.get_sql(opts)
File "c:\Python25\lib\site-packages\django\db\models\query.py" in get_sql
574. joins2, where2, params2 = val.get_sql(opts)
File "c:\Python25\lib\site-packages\django\db\models\query.py" in get_sql
622. return parse_lookup(self.kwargs.items(), opts)
File "c:\Python25\lib\site-packages\django\db\models\query.py" in parse_lookup
743. joins2, where2, params2 = lookup_inner(path, lookup_type, value, opts, opts.db_table, None)
File "c:\Python25\lib\site-packages\django\db\models\query.py" in lookup_inner
915. params.extend(field.get_db_prep_lookup(lookup_type, value))
File "c:\Python25\lib\site-packages\django\db\models\fields\__init__.py" in get_db_prep_lookup
172. return ["%%%s%%" % prep_for_like_query(value)]
File "c:\Python25\lib\site-packages\django\db\models\fields\__init__.py" in
25. prep_for_like_query = lambda x: str(x).replace("\\", "\\\\").replace("%", "\%").replace("_", "\_")
UnicodeEncodeError at /entreprise/search/
'ascii' codec can't encode character u'\xe9' in position 1: ordinal not in range(128)
Change History (2)
comment:1 by , 19 years ago
| Has patch: | set |
|---|---|
| Keywords: | unicode added |
| Needs tests: | set |
| Triage Stage: | Unreviewed → Accepted |
comment:2 by , 19 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
Closing because #3387 is closed.
Note:
See TracTickets
for help on using tickets.
The patch in ticket #3387 should fix it. #3387 was closed because the bug was triggered *there* by incorrectly using unicode as parameter for Queryset.filter(). I didn't notice that it makes sense to pass unicode parameters in the way demonstrated above (sorry about that).
Related thread in django-users
I check 'has patch' since it does have one, it's just in #3387.