¿Por qué se requiere una función unicode en models.py?

Es decir,

def __unicode__(self)
    return sumid;
16
Hulk 30 nov. 2009 a las 09:52

3 respuestas

La mejor respuesta

No es. Si define un método __unicode__(), Django lo llamará cuando necesite representar un objeto en un contexto donde se necesita una representación de cadena (por ejemplo, en las páginas de administración del modelo).

La documentación dice:

El método __unicode__() se llama cada vez que llamas a unicode() en un objeto. Desde la base de datos de Django los backends devolverán cadenas Unicode en los atributos de su modelo, lo haría normalmente quiere escribir un __unicode__() Método para su modelo.

19
Dominic Rodger 30 nov. 2009 a las 07:01

Creo que los demás han dado algunas explicaciones detalladas que deberían ser más que suficientes para ti. Pero aquí hay una respuesta directa: __unicode__() es equivalente a toString() en Java (y muchos otros idiomas)

4
disklosr 25 feb. 2014 a las 18:23

Soy un poco nueva en Django, pero creo que puedo ayudarte.

Primero, no se requiere exactamente, pero es una muy buena idea. El campo se usa para crear representaciones de sus objetos en el administrador de Django (de lo contrario, todos tienen el mismo nombre :-P) y cuando imprime un objeto en la ventana de su terminal para ver qué está sucediendo (de lo contrario, obtiene un genérico en su mayoría inútil mensaje).

En segundo lugar, por lo que escribiste, parece que eres nuevo en Python. Recomiendo leer algunos tutoriales de Python sobre la sintaxis de la clase. Además, los puntos y comas no son necesarios en este idioma. La sintaxis correcta para crear el método Unicode es:

class Foo(models.Model):
    # Model fields go here

    def __unicode__(self):
        return u"%i" % self.sumid

El método __unicode__ tiene guiones bajos dobles porque es una función especial, es decir, cuando se llama a la función incorporada unicode( obj ), devuelve una representación de cadena unicode de ese objeto (algo así como {{X2} de Java }).

Espero que esto ayude :-)

8
SapphireSun 2 dic. 2009 a las 20:12