error de Unicode al guardar un objeto en el administrador de Django

En mi aplicación django, tengo algunos objetos que hacen que la URL correspondiente en el administrador de django no sea ascii. (por ejemplo: http://mysite/admin/myapp/myclass/Présentation/ )

Puedo editar el objeto sin ningún problema, pero cuando lo guardo, tengo el siguiente error:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 24: ordinal not in range(128), HTTP response headers must be in US-ASCII format

Lo extraño es que el objeto se guarda correctamente en la base de datos.

¿Alguien sabe cómo el administrador de Django maneja Unicode? Cualquier información, puntero o idea que pueda ayudar a solucionar este problema se agradecería.

Gracias por adelantado

Actualización: Aquí está el código del modelo.

 class Plugin(models.Model): """Some subcontent that can be added to a given page""" class Meta: ordering = ['ordering'] name = models.CharField(max_length=32, primary_key=True) div_id = models.CharField(default='rightcol', max_length=32) published = models.BooleanField(default=True, help_text=_("If this is not checked, it is not displayed on the page.")) ordering = models.IntegerField(default=1, help_text=_("plugins are sorted with this number in ascending order")) content = models.TextField(blank=True) registration_required = models.BooleanField(_('registration required'), help_text=_("If this is checked, only logged-in users will be able to view the page.")) def __unicode__(self): return u"%s -- %s" % (self.name, self.div_id) 

Actualización: Eso está claro que los caracteres que no son ASCII no se recomiendan en una URL. Esa es la causa de mi problema y he cambiado eso.

¿Alguien sabe qué utiliza el administrador de Django para crear la URL de un objeto? Supongo que es la clave principal. ¿Es correcto? ¿Hay una manera de forzar a Django a usar otra cosa y recuperar el objeto de forma segura?

Estoy bastante seguro de que su base de datos probablemente esté utilizando la encoding latin1. Django supone que tienes todo configurado como Unicode (utf8).

Para verificar esto, ingrese a MySQL Shell y escriba:

 mysql> show variables like 'char%'; 

Si ve un montón de latin1 (o cualquier otra encoding que no sea utf8, excepto la binaria), tendrá que hacer esto: Abra my.cnf y busque la sección [mysqld] . Asegúrese de que después de tmpdir = /tmp , tenga las siguientes líneas:

 default-character-set=utf8 collation_server=utf8_unicode_ci character_set_server=utf8 skip-external-locking skip-character-set-client-handshake 

Reinicie el servidor.

Tendrá que volver a crear o editar manualmente la encoding de todas las bases de datos y la tabla que tenga, el cambio de my.cnf solo afecta a las bases de datos que se crearán.

Espero haberte ayudado.

Edición: Por cierto, ¿en qué versión de Django estás? Parece que este fue un error que se corrigió en 1.1: http://code.djangoproject.com/ticket/10267

Este enlace me salvó el día.
tienes que agregar soporte Unicode para tu administrador en tu models.py :

 class MyModel (models.Model): some_field = models.CharField(max_length=1000) def __unicode__(self): return u'%s'%(self.some_field) 

puede haber otros problemas como: la encoding de su sistema no es utf8 , la encoding de su base de datos no es utf8 y … ¡lo cual se menciona en el enlace provisto!

en tu modelo, has intentado poner

 class Model(models.Model): def __unicode__(self): return self.name ## having a model object named "name" 

No estoy seguro de si esta es la respuesta que estás buscando, pero ¿lo has intentado?

Ahora estoy usando la identificación predeterminada como clave principal para cada clase de mi modelo. Como consecuencia, no tengo caracteres prohibidos en la URL al acceder a objetos desde el sitio de administración.

Recomiendo mantener la ID predeterminada como clave principal en la mayoría de los casos