El metodo __str__ en los modelos para imprimir una representación en texto del modelo/clase
- Andrés Cruz
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.
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter