Opened 16 years ago

Closed 16 years ago

Last modified 13 years ago

#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 Alex Gaynor, 16 years ago

Is there an actual usecase for providing unicode strings, or is this a case of "dr it hurts when I do that"?

comment:2 by ramen, 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 ingenieroariel, 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 ramen, 16 years ago

Two other admin configuration seettings where Unicode strings can't be used:

  • search_fields
  • dictionary keys for fieldsets

comment:5 by Jacob, 16 years ago

milestone: 1.1
Triage Stage: UnreviewedAccepted

comment:6 by Malcolm Tredinnick, 16 years ago

Fixed in r10510.

comment:7 by Malcolm Tredinnick, 16 years ago

Resolution: fixed
Status: newclosed

comment:8 by Jacob, 13 years ago

milestone: 1.1

Milestone 1.1 deleted

Note: See TracTickets for help on using tickets.
Back to Top