#10645 closed (fixed)
Meta unique_together values cannot be Unicode strings
| Reported by: | ramen | Owned by: | nobody |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | 1.0 |
| Severity: | Keywords: | ||
| Cc: | Triage Stage: | Accepted | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
I had code like this in my Meta class for a Model:
unique_together = [(u'family', u'term')]
When I tried to save a record using the Admin, I got the following error:
Traceback:
File "/var/lib/python-support/python2.5/django/core/handlers/base.py" in get_response
86. response = callback(request, *callback_args, **callback_kwargs)
File "/var/lib/python-support/python2.5/django/contrib/admin/sites.py" in root
157. return self.model_page(request, *url.split('/', 2))
File "/var/lib/python-support/python2.5/django/views/decorators/cache.py" in _wrapped_view_func
44. response = view_func(request, *args, **kwargs)
File "/var/lib/python-support/python2.5/django/contrib/admin/sites.py" in model_page
176. return admin_obj(request, rest_of_url)
File "/var/lib/python-support/python2.5/django/contrib/admin/options.py" in __call__
197. return self.change_view(request, unquote(url))
File "/var/lib/python-support/python2.5/django/db/transaction.py" in _commit_on_success
238. res = func(*args, **kw)
File "/var/lib/python-support/python2.5/django/contrib/admin/options.py" in change_view
568. if form.is_valid():
File "/var/lib/python-support/python2.5/django/forms/forms.py" in is_valid
120. return self.is_bound and not bool(self.errors)
File "/var/lib/python-support/python2.5/django/forms/forms.py" in _get_errors
111. self.full_clean()
File "/var/lib/python-support/python2.5/django/forms/forms.py" in full_clean
241. self.cleaned_data = self.clean()
File "/var/lib/python-support/python2.5/django/forms/models.py" in clean
223. self.validate_unique()
File "/var/lib/python-support/python2.5/django/forms/models.py" in validate_unique
263. qs = self.instance.__class__._default_manager.filter(**lookup_kwargs)
Exception Type: TypeError at /admin/data/familyterm/17/
Exception Value: filter() keywords must be strings
Changing to:
unique_together = [('family', 'term')]
resolved the issue.
Change History (8)
comment:1 by , 17 years ago
comment:2 by , 17 years ago
The Django 0.96 to 1.0 porting guide at http://docs.djangoproject.com/en/dev/releases/1.0-porting-guide/ says the following:
Change string literals ('foo') into Unicode literals (u'foo'). Django now uses Unicode strings throughout.
I have changed all of my string literals to Unicode literals. If there are some string literals that I should not change, it would be helpful if these were documented.
comment:3 by , 17 years ago
When working on dynamic django models for OGR Datasource got biten by that. I had a dictionary of field names, field values that were in unicode after they came from the GeoDjango GDAL interface.
I ended up doing the string casting for the field names.
comment:4 by , 17 years ago
Two other admin configuration seettings where Unicode strings can't be used:
- search_fields
- dictionary keys for fieldsets
comment:5 by , 17 years ago
| milestone: | → 1.1 |
|---|---|
| Triage Stage: | Unreviewed → Accepted |
comment:7 by , 17 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
Is there an actual usecase for providing unicode strings, or is this a case of "dr it hurts when I do that"?