Ahora echemos un vistazo más de cerca a esta clave queryset
que hemos venido
usando hasta aquí. La mayoría de las vistas genéricas usan uno de estos
argumentos queryset
— es la manera en que la vista conoce qué conjunto de
objetos mostrar (mira "Seleccionando objetos" en el Capítulo 5 para una
introducción a los QuerySets, y mira el Apéndice C para los detalles
completos).
Para tomar un ejemplo simple, tal vez querríamos ordenar una lista de books por fecha de publicación, con el más reciente primero.
book_info = {
"queryset" : Book.objects.all().order_by("-publication_date"),
}
urlpatterns = patterns('',
(r'^publishers/$', list_detail.object_list, publisher_info),
(r'^books/$', list_detail.object_list, book_info),
)
Aunque se trata de un ejemplo muy sencillo, ilustra bien la idea. Obviamente en una aplicación real tendrás que hacer algo más que reordenar objetos. Si quieres presentar una lista de libros de un publisher particular, puedes usar la misma técnica:
apress_books = {
"queryset": Book.objects.filter(publisher__name="Apress Publishing"),
"template_name" : "books/apress_list.html"
}
urlpatterns = patterns('',
(r'^publishers/$', list_detail.object_list, publisher_info),
(r'^books/apress/$', list_detail.object_list, apress_books),
)
Nota que además de un queryset
filtrado, también estamos usando un nombre de
plantilla personalizado. Si no lo hiciéramos, la vista genérica usaría la misma
plantilla que la lista de objetos "genérica", que puede no ser lo que
queremos.
También nota que ésta no es una forma muy elegante de hacer publisher-specific books. Si queremos agregar otra página publisher, necesitamos otro puñado de líneas en la URLconf, y más de unos pocos publishers no será razonable. Enfrentaremos este problema en la siguiente sección.
Si obtienes un error 404 cuando solicitas /books/apress/
, para estar
seguro, verifica que en realidad tienes un Publisher con el nombre Apress
Publishing. Las vistas genéricas tienen un parámetro allow_empty
para
este caso. Mira el Apéndice D para mayores detalles.