Ver índice de contenidos del libro

5.12. Acotar datos

Otra necesidad común es buscar sólo un número fijo de filas. Imagina que tienes miles de editores en tu base de datos, pero quieres mostrar sólo el primero. Puedes hacer eso usando la sintaxis estándar de Python para el acotado de listas:

>>> Publisher.objects.all()[0]
<Publisher: Addison-Wesley>

Esto se traduce, someramente, a:

SELECT
    id, name, address, city, state_province, country, website
FROM book_publisher
ORDER BY name
LIMIT 1;

Nota Hemos sólo arañado la superficie del manejo de modelos, pero deberías ya conocer lo suficiente para entender todos los ejemplos del resto del libro. Cuando estés listo para aprender los detalles completos detrás de las búsquedas de objetos, échale una mirada al Apéndice C.

5.12.1. Eliminar objetos

Para eliminar objetos, simplemente llama al método delete() de tu objeto:

>>> p = Publisher.objects.get(name="Addison-Wesley")
>>> p.delete()
>>> Publisher.objects.all()
[<Publisher: Apress Publishing>, <Publisher: O'Reilly>]

Puedes también borrar objetos al por mayor llamando a delete() en el resultado de algunas búsquedas:

>>> publishers = Publisher.objects.all()
>>> publishers.delete()
>>> Publisher.objects.all()
[]

Nota Los borrados son permanentes, así que, ¡ten cuidado!. En efecto, normalmente es una buena idea evitar eliminar objetos a menos que realmente tengas que hacerlo — las base de datos relacionales no tiene una característica "deshacer" muy buena, y recuperar desde copias de respaldo es doloroso.

A menudo es una buena idea agregar banderas "activo" a tus modelos de datos. Puedes buscar sólo objetos "activos", y simplemente fijar el campo activo a False en lugar de eliminar el objeto. Entonces, si descubres que has cometido un error, puedes simplemente volver a conmutar el estado de la bandera.