Modelos en Django
Modelos en Django
Modelos en Django
¿Qué es un modelo?
En Django los modelos son como django tratara los datos, contendrá los campos de los objetos
que queremos guardar. Generalmente django creara por cada modelo una tabla en la base de
datos.
Lo básico:
Cada modelo es una clase python que hereda de django.db.models.Model
Cada atributo del modelo representa un campo de la tabla de la base de datos
Django de base nos da acceso a la base de datos.
INSTALLED_APPS = (
#...
'myapp',
#...
)
A la hora de usar los campos de un modelo tendrás que importar models y llamarlo cada vez
que vayas a crear un campo. Los modelos se suelen guardan en el models.py de la aplicación
previamente creada.
class Car(models.Model):
manufacturer = models.ForeignKey('Manufacturer')
# ...
Los campos:
Los campos son el tipo de objeto del atributo que guardara, hay varios tipos:
AutoField: Es un IntegerField que se incrementa cuando creas un nuevo objeto, casi que
no es necesario ya que django lo crea solo si no especificas otro campo como id.
FilePathField: Sirve para mostrar los archivos accesible de una carpeta siguiendo una
restricción si se quiera, para hacer alguna operación sobre ellos.
o FilePathField(path=None[, match=None,recursive=False, max_length=100,
**options])
path (requerido): directorio del que sacara FilePathField las opciones.
match: filtro por el que pasaran los archivos, se usaran expresiones
regulares.
recursive: False por defecto, especifica si entran las subcarpetas de la
ruta indicada por path.
max_length: Indica el tamaño máximo del nombre del archivo.
FloatField: Campo que guarda una instancia del modelo Float de python.
ImageField: Como el FileField pero solo acepta formatos de imágenes. Tiene dos
campos opcionales mas que el FielField
o height_field: Representa el alto máximo de la imagen.
o width_field: Representa el ancho máximo de la imagen.
IntegerField: Guarda un entero.
GenericIPAddressField: Guarda una ip, ya sea ipv4 o ipv6. Para saber cómo las guarda
Doc Django.
SlugField: Campo que guarda una pequeña etiqueta (letras, números, guiones) suele
usarse en las url.
URLField: Guarda una dirección html, comprueba que lo introducido sea una dirección
html.
Campos de relación:
ForeignKey: Para referir objetos a un objeto, un modelo puede referirse a un modelo,
pero un modelo puede estar referido a más de uno, es lo que se llama un many-to-one
referencia.
ManyToManyField: Para guardar una referencia a varios objetos de la misma clase. Hay
que definir la clase con la que se relaciona. Va guardando las referencias a esos objetos
en una lista con las primary keys referncia.
OneToOneField: Es como el ForeignKey pero tiene unique=True, por lo que solo puede
haber una referencia a ese objeto.
default: El valor por defecto que tiene el modelo, si se va a guardar un valor distinto a
vació se guardara con el valor por defecto.
unique=True: Indica que el valor es único, solo podrá haber uno en la base de datos.
Para seguir con el ejemplo tratado anteriormente crearemos un modelo más complejo:
#encoding:utf-8
from django.db import models
PAISES=(('ES','Español'),('EN',"Ingles"),('DE','Aleman'))
class Autor(models.Model):
nombre = models.CharField(max_length=20, help_text='Introduce el nombre del autor')
apellidos = models.CharField(max_length=60, blank=True, null=True)
nacimineto = models.DateField(blank=True, null=True)
nacionalidad = models.CharField(max_length=10, choices=PAISES, default='ES')
correo = models.EmailField(unique=True, blank=True, null=True)
foto = models.ImageField(upload_to='/imagenes', blank=True, null=True)
pagina = models.URLField(blank=True, null=True)
def __unicode__(self):
return self.nombre
class Libro(models.Model):
titulo = models.CharField(max_length=100)
autor = models.ForeignKey('Autor')
paginas = models.IntegerField(blank=True, null=True)
resumen = models.TextField()
texto = models.FileField(upload_to='/libros', blank=True, null=True)
terminado = models.BooleanField(default=False)
def __unicode__(self):
return self.titulo
def get_puntuacion_media(self):
return 0
Con esto doy por concluidos los modelos, si tenis alguna duda no dudéis en dejar un
comentario, enviar un correo o lo que queráis.