En python, en el momento que intentamos algo como esto:
>>> unicode('pepe', 'utf-8')
u'pepe'
>>> unicode(u'pepe', 'utf-8')
Traceback (most recent call last):
File "", line 1, in
TypeError: decoding Unicode is not supported
Obtenemos el TypeError. En el admin de django, el error lo obtendremos siempre que grabemos caracteres >255. Parece provenir del hecho de codificar el unicode en ascii en vez de utf-8 ¿?.
Si hacemos:
def __unicode__(self):
return unicode(self.descripcion)
Obtendremos el error de decodificación ascii, pero si hacemos...
def __unicode__(self):
return unicode(self.descripcion, 'utf-8')
...nos funcionará pero no podremos usar el admin para examinar el modelo porque nos genera el error anterior.
Tenemos dos posibilidades, aunque no las comprendo en profundidad:
Solución 1):
from django.utils.encoding import smart_unicode
En los modelos poner:
def __unicode__(self):
return smart_unicode(("%s" % self.descripcion))
Solución 2) Llamado "método del literal"
def __unicode__(self):
return (u"%s" % self.descripcion)
En todo caso es conveniente poner el setting
DEFAULT_CHARSET='utf-8'
que fuerza utf-8 a la hora de procesar y servir las plantillas.
Más info sobre este tema estaría bien. En mi caso uso mysql con utf-8 y ordenación spanish2, ubuntu 10.10 con utf-8 y apache forzado a servir utf-8.