Estoy usando Python 3 e intento convertir un QuerySet en texto legible por humanos. Tengo una línea como esta:
top_post = Post.objects.filter(category='1')[:1]Eso se imprime así:
<QuerySet [<Post: Test Post 1>]>Lo que me hace rascarme la cabeza es un QuerySet similar que se convierte con éxito cuando se muestra a través de una plantilla:
latest = Post.objects.order_by('-published_date')[:5]"Último" usa un bucle for... en la plantilla:
{% for latest_posts in latest %} <h1>{{ latest_posts }}</h1>Mientras que "top_post" muestra solo un espacio en blanco:
<h1>{{ top_post }}</h1>¿Alguien ve lo que falta?
{{top_post}} es un conjunto de consultas (cortar un conjunto de consultas también produce un conjunto de consultas), por lo que debería mostrarlo. Cuando recorre el conjunto de consultas, como lo hace con la latest , muestra los objetos dentro.
{{top_post.0}} te daría el objeto que contiene top_post .
Alternativamente, puede usar
top_post = Post.objects.filter(category='1').first()para obtener el objeto directamente.
Debe implementar el método __str__ en el modelo Post donde define qué imprimir. Además, debe .get en lugar de .filter si espera que se devuelva un objeto.
Convertirlo en lista
def return(Post.objects.filter(category='1').first)