Modelo de datos de Django - I

Otra de mis traducciones libres ;-)
Fuente: http://www.djangoproject.com/documentation/model-api/

Modelo de datos

El modelo es único, es el código definitivo de los datos sobre tu información. Contiene los campos esenciales y los comportamientos de la información que almacenas. Generalmente cada modelo mapea a una uncia tabla de base de datos.

Básicamente

Cada modelo es una clase python que es una subclase de django.db.models.Model. Cada atributo del modelo representa un campo de la Base de Datos. El Metadata del modelo (información sin campo) se incluye en una clase interna llamada Meta. El Metadata usado por el site de Administración de Django se incluye en una clase interna llamada Admin. Con todo esto, Django proporciona una API de Acceso a Base de datos generado de manera automática, esto esta explicado en la Database API reference

Un documento adjunto a este es el repositorio oficial de ejemplos de modelo de datos. En el código fuente de Django estos ejemplos se encuentran en el directorio test/modeltest.

Ejemplo rápido.

En este ejemplo se hace el modelo de Persona, con los atributos first_name y last_name:

PYTHON:
  1. from django.db import models
  2.  
  3. class Person(models.Model):
  4.     first_name = models.CharField(max_length=30)
  5.     last_name = models.CharField(max_length=30)

first_name y last_name son campos del modelo. Cada campo esta especificado como un atributo de clase y cada atributo mapea una columna de la base de datos.

El anterior modelo de Person la orden de create table sera asi:

PYTHON:
  1. CREATE TABLE myapp_person (
  2.     "id" serial NOT NULL PRIMARY KEY,
  3.     "first_name" varchar(30) NOT NULL,
  4.     "last_name" varchar(30) NOT NULL
  5. );

Algunas notas tecnicas:

  • El nombre de la tabla, myapp_person, deriva automaticamente del metadata puede ser sobreescrito, mirar Table names a continuación.
  • El campo "id" es añadido automaticamente, pero este comportamiento puede ser sobreescrito, mirar Automatic primary key fields a continuación.
  • La sentencia SQL CREATE TABLE en este ejemplo esta formateada usando PostgreSql syntax, pero es digno de mención decir que Django usa Sqls Adaptados a la Base de datos especificada en tu fichero de configuración.

Campos

La parte más importante del modelo, y la única parte requerida por el modelo es la lista de campos definida. Los campos son especificados como atributos de clase.
Ejemplo:

PYTHON:
  1. class Musician(models.Model):
  2.     first_name = models.CharField(max_length=50)
  3.     last_name = models.CharField(max_length=50)
  4.     instrument = models.CharField(max_length=100)
  5.  
  6. class Album(models.Model):
  7.     artist = models.ForeignKey(Musician)
  8.     name = models.CharField(max_length=100)
  9.     release_date = models.DateField()
  10.     num_stars = models.IntegerField()

Restricciones de nombre.

Django solo tiene dos restricciones en el nombre de los campos del modelo:
-

  • Un campo no se puede llamar como una palabra reservada de Python, porque daria un resultado de Syntax Error Python :
    PYTHON:
    1. class Example(models.Model):
    2.     pass = models.IntegerField() # 'pass' is a reserved word!

  • Un campo no puede contener mas de un guion bajo por linea, Debido a la forma de trabajar Django con la sintaxis de las querys.
    PYTHON:
    1. class Example(models.Model):
    2.     foo__bar = models.IntegerField() # 'foo__bar' has two underscores!

Estas son las limitaciones para trabajar, tenga en cuenta también que los nombres de los campos no tienen que coincidir necesariamente con el nombre de la columna de la base de datos.
Mirar db_column a continuación.

Tipos de Campo

Cada campo el modelo debe ser una instancia apropiada de un atributo de una clase, Django utiliza los tipos de atributo de clase para determinar unas pocas cosas:

  • El tipo de la columna de la BD (INTEGER, VARCHAR)
  • El tipo de objeto a usar en la interface de administración de django ("Text",