martes, 22 de marzo de 2016

Creando los modelos




Ahora que hemos configurado las variables de entorno para nuestro ‘‘proyecto’’, estamos listos para comenzar a trabajar.

Cada aplicación que escribes en Django consiste de un paquete Python,. Django genera automáticamente la estructura de directorios básica de una aplicación, de forma que nos podamos enfocar en escribir código, en vez de estar creando directorios.

■ ¿Cuál es la diferencia entre un proyecto y una aplicación?
Una aplicación es una aplicación web que hace algo -­- por ejemplo, una bitácora, un registro de datos públicos o un sistema de encuestas. Un proyecto es un conjunto de aplicaciones configuradas para un sitio web particular. Un proyecto puede contener múltiples aplicaciones. Una aplicación puede pertenecer a múltiples proyectos.

En este tutorial crearemos una aplicación llamada encuestas, en el mismo directorio donde se encuentra el comando manage.py, así el archivo pueda ser importado como un módulo python en un nivel superior o como un sub-módulo de misitio.

Para crear nuestra aplicación, debemos asegurarnos de estar en el mismo directorio donde está el archivo manage.py y con el comando siguiente, crearemos una aplicación llamada encuestas:

$ python manage.py startapp encuestas

Esto creará un directorio encuestas, con una estructura de archivos como este:

encuestas/
__init__.py
admin.py
migrations/
__init__.py
models.py
tests.py
views.py

Esta estructura de directorios contiene la aplicación encuestas. El primer paso para escribir una base de datos en Django es definir sus modelos -­- esencialmente, un modelo es el diseño de la base de datos, con los meta datos adicionales.


Filosofía
Un modelo es la fuente única y definitiva de información de los datos. Contiene los campos y comportamiento esenciales de los datos que se están almacenando. Django sigue el Principio DRY (Don’t Repeat Yourself -­- No te repitas). El objetivo es definir el modelo de datos en un solo lugar y derivar cosas automáticamente a partir de él.

En nuestro sistema de encuestas que es la aplicación que acabamos de crear, crearemos dos modelos: Pregunta y Opción. Pregunta contiene el texto de una pregunta y una fecha de publicación. Opcion contiene dos campos: el texto de la opción y un contador de votos. Cada opción está asociada a una pregunta.

Estos conceptos son representados por simples clases python. Editamos el fichero encuestas/models.py para que se parezca a este:

encuestas/models.py

from django.db import models
class Pregunta(models.Model):
texto_pregunta = models.CharField(max_length=200)
fecha = models.DateTimeField(‘Fecha de publicación’)
class Opcion(models.Model):
pregunta = models.ForeignKey(Pregunta)
texto_opcion = models.CharField(max_length=200)
votos = models.IntegerField(default=0)

El código es sencillo de entender. Cada modelo es representado por una clase, que a su vez es una subclase de django.db.models.Model. Cada modelo tiene un número de variables, que representan un campo en la base de datos del modelo.

Cada campo está representado por una instancia de una clase llamada Field – por ejemplo la clase CharField se utiliza para guardar caracteres y la clase DateTimeField para datos del tipo fecha. Esta es la forma en que le decimos a Django qué tipo de datos contiene cada campo.

El nombre de cada instancia de models.Field (por ejemplo pregunta o fecha) es el nombre del campo, en un formato amigable para la base de datos. Este valor será usado en el código Python y la base de datos lo usará como el nombre de la columna correspondiente.

Algunas clases Field requieren de argumentos obligatorios. Por ejemplo, CharField requiere que se le pase un atributo max_length. Esto se usa no sólo en relación al esquema de la base de datos, sino también a la hora de hacer validaciones, como veremos más adelante.

La clase Field, posee algunos argumentos opcionales; en este caso hemos fijado el atributo default a un valor de votos es igual a 0.

Finalmente, observa que se hemos definido una relación foránea usando una clase ForeignKey. Esto le informa a Django que cada Opción está relacionada con una sola Pregunta y una Pregunta puede tener múltiples opciones. Django soporta todas las relaciones de base de datos típicas como: muchos a uno, muchos a muchos y uno a uno.

No hay comentarios.:

Publicar un comentario