El metodo __str__ en los modelos para imprimir una representación en texto del modelo/clase

- Andrés Cruz

In english

El metodo __str__ en los modelos para imprimir una representación en texto del modelo/clase

Lo siguiente que vamos a ver es una característica que nos permite representar un objeto como un String y el mismo es el método llamado Str.

Ya que si intentamos imprimir desde un template o empleando la función print un objeto que pertenezca a un modelo (o clase en general); veremos que aparecerá algo como lo siguiente:

Comment object (1)

En donde el Comment es el nombre del modelo y el (1) es el identificador en la base de datos.

Ahora bien, nosotros podemos representar un modelo de Django como si fuera un simple texto; realmente este es una característica que nos ofrece Python y no Django, que es poder representar un objeto como si fuera un string; por lo tanto cuando hacemos el print de este objeto básicamente va a aparecer la representación que definamos en la función Str; por ejemplo, para nuestro modelo:

class Comment(models.Model):
    text = models.TextField()
    date_posted = models.DateTimeField(auto_now_add=True)
    element = models.ForeignKey(Element, related_name='comments', on_delete=models.CASCADE, NULL=True)
 
    def __str__(self):
        return 'Comentario #{}'.format(self.id) 

Aquí nosotros podemos acceder a todos los atributos y métodos del modelo que contenga a dicha función; y este método es empleado internamente por Python para  representar dicha instancia de una clase mediante un string al momento de imprimir el texto.

Y si imprimimos el siguiente objeto:

print(elements[0])

Al hacer un print: 

Comentario #1

Aparecerá el texto que configuramos anteriormente; esto lo puedes emplear para Ada vez que tengas una clases y en algún punto la quieras imprimir, ya se mediante la función de print o desde el template de Django.

Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz En Udemy

Acepto recibir anuncios de interes sobre este Blog.