#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 , 16 years ago
comment:2 by , 16 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 , 16 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 , 16 years ago
Two other admin configuration seettings where Unicode strings can't be used:
- search_fields
- dictionary keys for fieldsets
comment:5 by , 16 years ago
milestone: | → 1.1 |
---|---|
Triage Stage: | Unreviewed → Accepted |
comment:7 by , 16 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"?