Opened 10 years ago

Closed 10 years ago

Last modified 7 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


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:

File "/var/lib/python-support/python2.5/django/core/handlers/" in get_response
  86.                 response = callback(request, *callback_args, **callback_kwargs)
File "/var/lib/python-support/python2.5/django/contrib/admin/" in root
  157.                 return self.model_page(request, *url.split('/', 2))
File "/var/lib/python-support/python2.5/django/views/decorators/" in _wrapped_view_func
  44.         response = view_func(request, *args, **kwargs)
File "/var/lib/python-support/python2.5/django/contrib/admin/" in model_page
  176.         return admin_obj(request, rest_of_url)
File "/var/lib/python-support/python2.5/django/contrib/admin/" in __call__
  197.             return self.change_view(request, unquote(url))
File "/var/lib/python-support/python2.5/django/db/" in _commit_on_success
  238.                 res = func(*args, **kw)
File "/var/lib/python-support/python2.5/django/contrib/admin/" in change_view
  568.             if form.is_valid():
File "/var/lib/python-support/python2.5/django/forms/" in is_valid
  120.         return self.is_bound and not bool(self.errors)
File "/var/lib/python-support/python2.5/django/forms/" in _get_errors
  111.             self.full_clean()
File "/var/lib/python-support/python2.5/django/forms/" in full_clean
  241.             self.cleaned_data = self.clean()
File "/var/lib/python-support/python2.5/django/forms/" in clean
  223.         self.validate_unique()
File "/var/lib/python-support/python2.5/django/forms/" 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 Changed 10 years ago by Alex Gaynor

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

comment:2 Changed 10 years ago by ramen

The Django 0.96 to 1.0 porting guide at 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 Changed 10 years ago by ingenieroariel

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 Changed 10 years ago by ramen

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

  • search_fields
  • dictionary keys for fieldsets

comment:5 Changed 10 years ago by Jacob

milestone: 1.1
Triage Stage: UnreviewedAccepted

comment:6 Changed 10 years ago by Malcolm Tredinnick

Fixed in r10510.

comment:7 Changed 10 years ago by Malcolm Tredinnick

Resolution: fixed
Status: newclosed

comment:8 Changed 7 years ago by Jacob

milestone: 1.1

Milestone 1.1 deleted

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