Code

Opened 5 years ago

Closed 5 years ago

Last modified 3 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: UI/UX:

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.

Attachments (0)

Change History (8)

comment:1 Changed 5 years ago by Alex

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset

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

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 Changed 5 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 5 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 5 years ago by jacob

  • milestone set to 1.1
  • Triage Stage changed from Unreviewed to Accepted

comment:6 Changed 5 years ago by mtredinnick

Fixed in r10510.

comment:7 Changed 5 years ago by mtredinnick

  • Resolution set to fixed
  • Status changed from new to closed

comment:8 Changed 3 years ago by jacob

  • milestone 1.1 deleted

Milestone 1.1 deleted

Add Comment

Modify Ticket

Change Properties
<Author field>
Action
as closed
as The resolution will be set. Next status will be 'closed'
The resolution will be deleted. Next status will be 'new'
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.