Campos
Un modelo puede tener un número arbitrario de campos, de cualquier tipo. Cada uno representa una columna de datos que queremos guardar en nuestras tablas de la base de datos. Cada registro de la base de datos (fila) consistirá en uno de cada posible valor del campo. Echemos un vistazo al ejemplo visto arriba:
my_field_name = models.CharField(max_length=20, help_text="Enter field documentation")
Nuestro ejemplo de arriba tiene un único campo llamado
my_field_name, de tipo models.CharField — lo que significa que este campo contendrá una cadena de caracteres alfanuméricos. Los tipos de campo son asignados usando clases específicas, que determinan el tipo de registro que se usa para guardar el dato en la base, junto con un criterio de evaluación que se usará cuando se reciban los valores de un formulario HTML (es decir, qué constituye un valor válido). Los tipos de campo pueden también tomar argumentos que especifican además cómo se guarda o cómo se puede usar. En este caso le damos a nuestro campo dos argumentos:max_length=20— Establece que la longitud máxima del valor de este campo es 20 caracteres.help_text="Enter field documentation"— proporciona una etiqueta de texto para mostrar que ayuda a los usuarios a saber qué valor proporcionar cuando un usuario ha de introducirlo via un formulario HTML.
El nombre del campo se usa para referirnos a él en consultas (queries) y plantillas (templates). Los campos también tienen una etiqueta, que puede ser especificada como argumento (
verbose_name) o inferida automáticamente, a partir del nombre de variable que identifica al campo, capitalizando la primera letra y reemplazando los guiones bajos por espacios (por ejemplo my_field_name tendría la etiqueta por defecto de My field name). El orden en que los campos son declarados afectará su orden por defecto si un modelo es renderizado en un formulario (ej. en el sitio de Administración), aunque este comportamiento se puede anular.Argumentos comunes de los campos
Los siguientes argumentos son comunes a la mayoría de los tipos de campo y pueden usarse al declararlos:
- help_text: Proporciona una etiqueta de texto para formularios HTML (ej. en el sitio de Administración), tal como se describe arriba.
- verbose_name: Nombre de fácil lectura que se usa en etiquetas para el campo. Si no se especifica, Django inferirá el valor por defecto del verbose name a partir del nombre del campo.
- default: Valor por defecto para el campo. Puede ser un valor o un callable object(objeto que puede ser llamado como una función), en cuyo caso el objeto será llamado cada vez que se cree un nuevo registro.
- null: Si es
True, Django guardará valores en blanco o vacíos comoNULLen la base de datos para campos donde sea apropiado (unCharFieldguardará una cadena vacía en su lugar). Por defecto esFalse. - blank: Si es
True, se permite que el campo quede en blanco en tus formularios. El valor por defecto esFalse, lo que significa que la validación de formularios de Django te forzará a introducir un valor. Con frecuencia se usa connull=True, porque si vas a permitir valores en blanco, también querrás que la base de datos sea capaz de representarlos de forma apropiada. - choices: Un grupo de valores de selección para este campo. Si se proporciona, el widget correspondiente por defecto del formulario será una caja de selección con estos valores de selección en vez del campo de texto estándar.
- primary_key: Si es
True, establece el campo actual como clave primaria para el modelo (Una clave primaria es una columna especial de la base de datos, diseñada para identificar de forma única todos los diferentes registros de una tabla). Si no se especifica ningún campo como clave primaria, Django añadirá automáticamente un campo para este propósito.
Hay muchas otras opciones — puedes ver la lista completa de opciones aquí.
Tipos comunes de campos
La lista siguiente describe algunos de los tipos de campo más comunmente usados.
- CharField se usa para definir cadenas de longitud corta a media. Debes especificar la
max_length(longitud máxima) de los datos que se guardarán. - TextField se usa para cadenas de longitud grande o arbitraria. Puedes especificar una
max_lengthpara el campo, pero sólo se usa cuando el campo se muestra en formularios (no se fuerza al nivel de la base de datos). - IntegerField es un campo para almacenar valores de números enteros y para validar los valores introducidos como enteros en los formularios.
- DateField y DateTimeField se usan para guardar/representar fechas e información fecha/hora (como en los objetos Python
datetime.dateydatetime.datetime, respectivamente). Estos campos pueden adicionalmente declarar los parámetros (mutuamente excluyentes)auto_now=True(para establecer el campo a la fecha actual cada vez que se guarda el modelo),auto_now_add(para establecer sólo la fecha cuando se crea el modelo por primera vez), ydefault(para establecer una fecha por defecto que puede ser sobreescrita por el usuario). - EmailField se usa para validar direcciones de correo electrónico.
- FileField e ImageField se usan para subir ficheros e imágenes respectivamente (el
ImageFieldañade simplemente una validación adicional de que el fichero subido es una imagen). Éstos tienen parámetros para definir cómo y donde se guardan los ficheros subidos. - AutoField es un tipo especial de
IntegerFieldque se incrementa automáticamente. Cuando no especificas una clave primaria para tu modelo, se añade -automáticamente- una de éste tipo. - ForeignKey se usa para especificar una relación uno a muchos con otro modelo de la base de datos (ej. un coche tiene un fabricante, pero un fabricante puede hacer muchos coches). El lado "uno" de la relación es el modelo que contiene la clave.
- ManyToManyField se usa para especificar una relación muchos a muchos (ej. un libro puede tener varios géneros, y cada género puede contener varios libros). En nuestra aplicación de la biblioteca usaremos ésta de forma muy similar a
ForeignKeys, pero pueden usarse de formas más complicadas para describir las relaciones entre grupos. Éstas tienen el parámetroon_deletepara definir que ocurre cuando un registro asociado se borra (ej. un valor demodels.SET_NULLestablecería simplemente el valor aNULL).
Hay muchos otros tipos de campos, incluyendo campos para diferentes tipos de números (enteros grandes, enteros pequeños, en coma flotante), boleanos, URLs, slugs, identificadores únicos, y otra información relacionada con el tiempo (duración, hora, etc..). Puedes ver la lista completa aquí.
Comentarios
Publicar un comentario