Curso Django: El Shell de Django
En el capítulo anterior, vimos lo fácil que es crear un modelo con Django, en este capítulo veremos que podemos hacer con los modelos. Si llegaste a este capítulo y no leiste los anteriores, quizas lo encuentres un poco dificil de entender, así que dale un vistazo a los capítulos anteriores.
Los modelos nos van a permitir manipular los datos: registrarlos, editarlos, actualizarlos, consultarlos, eliminarlos y realizar procesos con ellos. Toda está manipulación se reflejará luego en las vistas y posteriormente en las plantillas para mostrar los resultados en el navegador, esta manipulación se le conoce generalmente como: Consultas.
El Shell
El Shell es el interprete interactivo de Python, que nos permitirá probar los modelos, hacer consultas, analizar resultados, antes de elaborar las vistas. Es muy útil si queremos ahorrar tiempo al momento de responder a los requerimientos que los usuarios de la aplicación puedan necesitar.
Para poder acceder a la shell, abrimos una terminal o ventana de comandos, y nos ubicamos en la carpeta de proyecto (en donde se encuentre el archivo manage.py) y digitamos:
python manage.py shell
Debemos visualizar el siguiente resultado:
Lo importante es reconocer los elementos: el prompt se representa por >>> y el resultado de nuestras instrucciones se visualizarán en nuevas líneas (sin ningún símbolo previo a ellas)
Las consultas
Las consultas en base a los modelos de Django son la base de todo el desarrollo en este framework estas consultas nos pueden permitir saber, por ejemplo, la lista de usuarios, los correos electronicos de los que hacen comentarios, el primero comentario de un artículo, los artículos del mes de mayo, y la lista de posiblidades es larga.
Las consultas están descritas muy claramente en la documentación oficial, para poder hacer esto más simple aquí también usaremos esta pequeña chuleta o cheat sheet como también es conocido.
La referencia de todos estos métodos se encuentran también en la documentación oficial.
Ejemplos
Ahora pasamos a lo divertido, seguimos trabajando con nuestro proyecto de ejemplo, para poder realizar algunos ejemplos tenemos que modificar y corregir el models.py y dejarlo así: (ya no existe el modelo Bebida, ya no es necesario, también se debe eliminar cualquier rastro del modelo Bebida de admin.py)
Una vez que tenemos listo el models.py , reiniciamos el modelo (si no recuerdas como reiniciar revisa el capítulo: El modelo de datos)
python manage.py reset principal
Una vez con los modelos listos, es hora de probar el interprete interactivo (shell). No olvidar que la siguiente instrucción se debe lanzar desde el directorio donde se encuentra el archivo manage.py
python manage.py shell
Una vez dentro del shell, empezamos a importar los modelos, para ello digitamos
from principal.models import Receta, Comentario
Esta instrucción importa todo el modelo al shell. Aquí es donde podemos consultar el contenido de los modelos y otras consultas, la sintaxis es del tipo:
Nombre_de_modelo.objects.metodo()
Donde podemos reemplazar Nombre_de_modelo y método por las diversas opciones que están en el cheatsheet (chuleta)
En la imagen vemos como resultado una lista vacia [], entonces vamos a agregar elementos, para ello también necesitamos al modelo usuario que ya lo tiene Django, una vez que lo importamos sacamos al usuario cuya llave primaria (pk) sea 1.
Ahora si introducimos datos a los modelos: (la r es solo una variable cualquiera)
Y comprobamos que se ha registrado:
Agregamos un comentario a la receta anterior: (la c es solo una variable cualquiera)
Agregamos una receta mas: (Se puede escribir todo en una sola línea, yo lo hago para que se vea bien en la imagen)
Sigamos jugando, ahora mostraremos las recetas cuyos ingredientes no empiecen con la letra A: (notar que luego de ingredientes hay dos guiones bajos)
Ahora las recetas, que mencionen en su preparación la palabra ‘tetera’:
Y si queremos ordenar alfabéticamente por titulo de receta:
Ahora lo invertimos:
Mostramos los comentarios de cada receta:
Ahora me gustaría actualizar el titulo ‘Huevo Frito’ a la de ‘Huevito Frito’:
Sigo agregando comentarios a la primera receta y deseo saber cuantos comentarios hay hasta el momento en ambas recetas:
Agrego un comentario a la segunda receta (un comentario troll) y luego lo elimino:
Ahora deseo saber el nombre de usuario y correo electrónico del usuario que agregó la receta con el título exacto de ‘Agua hervida’:
Como verán hacer consultas en Django es simple, sin embargo siempre es bueno tener la documentación a la mano, ya que recordar tantos métodos puede ser tedioso al principio.
Nota:
Las consultas son el paso previo a trabajar con las vistas y las plantillas, nos permitirán entregar a los usuarios del proyecto, la información que requieran. El próximo capítulo será: Las vistas.
Práctica tus propias consultas, juega con los modelos, diviértete, que el momento de aplicarlas serán en el próximo capítulo.
Adios SQL!!!! : ]
El shell es genial para probar muchas cosas mientras programas otras :3
Cada vez se pone más interesante.
¿Pero y que pasa con el rendimientos de las consultas complejas?
Saludos.
Hola Daniel
El rendimiento depende mucho del motor de base de datos que usas para el proyecto y como este ha sido optimizado. En consultas complejas se pueden mejorar usando caching (https://docs.djangoproject.com/en/dev/topics/cache/#the-low-level-cache-api) o se puede configurar db_index para las columnas apropiadas (https://docs.djangoproject.com/en/dev/ref/models/fields/#db-index)
excelente como funciona el shell y nueva mente muchas gracias a @neosergio y @maestros por su exelente tutorial de Django
Que tal Sergio.
Gracias por la respuesta.
Otra duda:
En un ambiente productivo, se usa la misma instrucción para levantar un servicio python-django o se usa otro.
En otras palabras, el comando
“python manage.py runserver”
Es el mismo que se emplearía para un ambiente productivo o hay más herramientas para dar servicio web.
Espero haberme explicado.
Saludos.
La instrucción ‘runserver’ solo se usa en entornos de desarrollo. En entornos de producción se debe configurar el servidor web, de tal forma que pueda leer instrucciones de Python. Eso lo veremos en un capítulo mas adelante, dedicado al despliegue.
Un saludo
Excelente el shell de django, pero tengo una pregunta alguien a podido hacer migraciones con “south”. Yo estoy en ese proceso antes ya lo había trabajado con south y me había funcionado muy bien, pero con las versiones anteriores de django. alguien me podria ayudar para saber cual versión de “south” es la apropiada para trabajar con la versión de django-1.4 y como hacer migraciones en esta versión por que me parece que es una herramienta muy importante para el desarrollo en django debido a los cambios que pudieran presentar en un futuro para los modelos en todo el desarrollo.
MUCHAS GRACIAS EXCELENTE EL CURSO CADA CLASE SE PONE MAS INTERESANTE
Muy Buenos estos tutoriales, Sergio al finalizar este curso vamos a poder montar un pagina web en django, Otra cosa a donde te podemos seguir para segiur aprendiendo de Django
Una duda… este tipo de base de datos no crea un tipo registro de todos los movimientos que se hacen en la base? asi como los triggers noc si se puede :), por cierto esta bueno el tutorial
que bien…….
estare esperando las vistas…
gracias
Sergio I. M. al finalizar nos diras como podemos subir nuestro proyecto a internet , yo ya tengo uno que le faltan algunas modificaciones pero es solo para mostrar algunas interfacez lo que quiero es subirlo para que puedan acceder y llenar datos y esas cosas :3
Hola Sergio y gracias nuevamente por el curso, te cuento que estoy siguiendo el curso paso a paso, y se me complicaba para editar los archivos todos por separado, entonces estuve buscando, y encontré un IDE que tiene cierto soporte para django, (es con el que sigo el curso). se llama Aptana Estudio, de seguro ya lo debes de conocer, pero lo comento por si a alguien le sirve. Una pregunta, ¿sabes de donde se puede conseguir documentación en castellano acerca del api de django (las clases los métodos, etc…)? desde ya gracias y felicitaciones una vez mas por el curso.
Yo utilizo django-rosetta para las traducciones que despues la compila y todo bien :3, algunas traducciones no son tan buenas que digamos y con django-rosetta se puede hacer genial, aveces utilizo djang-grappelli para la interfaz colores e iconos :3
Hola Jefferson, la versión 0.7.4 tiene errores, por eso es recomendable usar la 0.7.5 (http://south.aeracode.org/docs/releasenotes/0.7.5.html)
Hola Alejandro, el útlimo capítulo esta destinado al despliegue, ahi veremos lo que debemos tener en cuenta para el servidor web. Puedes seguirme en twitter (@neosergio)
La base de datos es sqlite, si a eso te refieres. Y si quieres hacer un registro de tus movimientos más optimizado debes programar tu mismo en el modelo, que datos quieres que se registren y trabajar con las vistas.
Hola Danilo, al final del curso veremos donde hostear nuestro proyecto, es el ultimo capitulo. Hola Martin con respecto a la IDE eso es lo bueno puedes usar el que mas te guste, solo debe soportar Python, y con respecto a la documentación en castellano, no hay una realmente actualizada, es mas la propia documentación oficial va sufriendo cambios y arreglos, lo último de lo último en la documentación lo puedes encontrar aquí (https://github.com/django/django/tree/master/docs)
Hola Sergio felicidades por el curso, una pregunta en Django cual es la convencion del codigo en cuanto a modelos, por ejemplo en otros framework usan camelCase: PersonaGrande.
Hola Sergio como puedo hacer un inner join con django ?
Hola Edgar, el estilo de código de Django está documentado aquí: https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/coding-style/ como veras se recomienda usar underscores en lugar de camelCase: Persona_grande
Un saludo y gracias por seguir el curso
Imagino que tu pregunta se dirige a hacer una consulta cruzada, si es que es esa tu pregunta, pues lo que puedes hacer es crear instancias y juntarlas en una sola consulta. Si me das un ejemplo de lo que quieres hacer, te podría ayudar con mayor detalle, revisa la documentación del framework, te ayudará a resolver tus dudas https://docs.djangoproject.com/en/dev/topics/db/queries/
Estos son mis modelos https://gist.github.com/2764305 y mi pregunta es como mostrar el vehiculo, su propietario y placa cuyo estado sea True
Como puedo crear instancias y juntarlas en una sola consulta ?
intenta hacer esto:
p = Placa.objects.filter(estado=True)
for elemento in p:
p.vehiculo.propietario.propietario
Gracias por la respuesta funciona correctamente, ahora si cambio la relación por ejemplo que un Vehículo tiene una a mas placas, luego que el Vehículo tiene uno a mas Propietarios y viceversa; entonces tendría que instanciar Vehículo y Propietario en DetallePropietario, como se ve en esta imagen http://goo.gl/h9ibdmi pregunta es como mostraría la placa, y el nombre del propietario, dependiendo que el estado sea True tanto del modelo Placa y Vehículo
El enlace que pones no funciona. Pero supongo que estas preguntando como pasar un AND , esto solo debes hacerlo separando por comas los parametros que necesitas
Me olvidaba hacer referencia a la documentación sobre esto: https://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects
Un saludo
Hola Sergio, ante todo Gracias, por el esfuerzo… es genial contar con @maestros como Ud.
Mi consulta es referente a que pasaría si no asigno una variable a mi receta (en tu ejemplo la ‘r’) , como hago para agregarle un comentario?
De antemano gracias por la aclaración…
Claro podrías probar este ejemplo: (Agrega un comentario a la receta con llave primaria 1) Comentario.objects.create(receta=Receta.objects.get(pk=1), texto=’cuidado con el colesterol’)
Muy bueno el tutorial Sergio.Pero una pregunta podrias explicar mejor la parte del usuario que tiene django…porque no necesite crear un class para usuario como si se hizo para Receta y comentario