jueves, 28 de marzo de 2019

2. Proyecto alumnos: Cambios en el modelo (parte 2)

Modificación del modelo

Tipos de Campos, atributos (argumentos)

Un modelo puede tener un número arbitrario de campos, de cualquier tipo.

Previamente se había creado un proyecto Alumnos con aplicación datos_per, en esta ocasión se le agregará cambios en el modelo.


Original

Código:


# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

# Create your models here.
class Datospersonales(models.Model):
    Num_cont = models.CharField(max_length=10, primary_key=True)
    Nombre = models.CharField(max_length=50)
    Sexo = models.CharField(max_length=1)
    Edad = models.IntegerField()
    Fecha_nacimiento = models.DateField()
    Carrera = models.CharField(max_length=30)
    Telefono = models.CharField(max_length=12)
    email = models.EmailField()
    Domicilio = models.TextField()





Se creo un modelo en datos_per/models, con los siguientes tipos de campos, el modelo tiene lo siguiente:


Tipos de campos

  • 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_length para 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.date  y datetime.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), y default (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 ImageField añ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 IntegerField que 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ámetro on_delete para definir que ocurre cuando un registro asociado se borra (ej. un valor de models. SET_NULL establecería simplemente el valor a NULL).
  • BooleanField: permite guardar información del tipo verdadero o falso, en la base de datos se guarda respectivamente un 1 (verdadero) o un 0 (falso) según corresponda. Este campo se despliega en pantalla como un checkbox.
  • DurationField: permite agregar tiempos de duración en formato de Días horas: minutos: segundos eje 3 d 2:20:20 esto es 3 días con 20h con 20m y 20 segundos.
  • EmailField: permite introducir correos electrónicos, este campo es verificado automáticamente por django
  • URLField: permite almacenar direcciones de Internet.
  • FilePathField: permite almacenar una ruta a un archivo en el disco local del servidor, en pantalla es mostrado como una lista desplegable donde aparecen los nombres de cada archivo.

Argumentos de los campos

  • 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. Establece el nombre de la etiqueta
  • 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 como NULL en la base de datos para campos donde sea apropiado (un CharField guardará una cadena vacía en su lugar). Por defecto es False, permite que el campo sea guardado en la base sin contenido ingresado por el usuario y en la base de datos se guardara NULL como valor.
  • blank: Si es True, se permite que el campo quede en blanco en tus formularios. El valor por defecto es False, lo que significa que la validación de formularios de Django te forzará a introducir un valor. Con frecuencia se usa con null=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.
  • db_column: establece el nombre que puede ser asignado a la columna de la tabla en la base de datos
  • unique: permite la verificación del campo en la BD, de manera que no puedan introducirse valores repetidos.

Para campos de texto:

  • max_lenght: establece el maximo de caracteres que el campo puede admitir.

Para campos de archivo:
  • upload_to: establece la ruta en disco donde el servidor deberá guardar los archivos subidos a la plataforma.

Para campos con numéricos decimales:
  • max_digits: establece el máximo de cifras permitidas por el campo
  • decimal_places: establece el máximo de cifras decimales permitidas por el campo.


Nuevo

Código:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

# Create your models here.
class Datospersonales(models.Model):
    Num_cont = models.CharField(max_length=10, primary_key=True, verbose_name='Número de control')
    Nombre = models.CharField(max_length=50)
    SEXO = (('F', 'Femenino'), ('M', 'Masculino') )#arreglo
    #Sexo = models.CharField(max_length=1, choices=SEXO)
    Edad = models.IntegerField(help_text='Solo mayores de edad')
    Fecha_nacimiento = models.DateField()
    #Lista de Opciones en un Campo:
    #Carrera = models.CharField(max_length=30, choices=carrera_choices,default = IS,)
    IS = 'IS'
    LC = 'LC'
    LAE = 'LAE'
    CARRERA_CHOICES = (('IS', 'Ing. en Sistemas'),
   ('IS', 'Ing. en Sistemas'), ('LAE', 'Lic. en Administración de empresas'))
    carrera_choices = models.CharField(max_length=7, choices = CARRERA_CHOICES, default = IS)
    Telefono = models.CharField(max_length=12)
    email = models.EmailField()
    Domicilio = models.TextField()




Al correr el servidor.

Mensaje de help_text


Lista de carreras.



El modelo consta de los siguientes campos:

Num_cont es un campo CharField que guarda cadena de caracteres alfanuméricos, cuenta con el argumento max_length que establece la longitud del campo, primary_key = True establece como clave primaria y verbose_name = 'Nombre del campo etiqueta'.
En el campo sexo es una arreglo con dos opciones F y M.
Tenemos un arreglo con varias de las carreras, con choice para la selección, valor por default.
help_text permite dar un mensaje de restricciones o advertencia.


Después de haber realizado las modificaciones correspondientes, en consola, realizamos una migración con el comando, creamos el modelo :


python manage.py makemigrations





Se muestra que se removió Carrera, pero ahora esta establecida se agrego como arreglo carrera_choices, se realizo cambios en Edad y Num_cont.

Y finalmente creamos las tablas correspondientes en la base de dato que tengamos dada de alta en el apartado database en el archivo settings:


python manage.py migrate




Ahora podemos seguir agregando mas opciones de carrera, en el arreglo para dr





Ejecutamos el comando:


Vemos la actualización de carrera_choices. Ahora se migra lo últimos cambios.


Ahora corremos el servidor para ver los cambios.







Referencias:

https://developer.mozilla.org/es/docs/Learn/Server-side/Django/Models 

https://www.evernote.com/shard/s663/client/snv?noteGuid=fb8bb589-ac4e-47a1-820b-0c11ac1c5e0a&noteKey=8fccea01ec279129&sn=https%3A%2F%2Fwww.evernote.com%2Fshard%2Fs663%2Fsh%2Ffb8bb589-ac4e-47a1-820b-0c11ac1c5e0a%2F8fccea01ec279129&title=django%2BAlumnos

No hay comentarios:

Publicar un comentario

Unidad 3 Configuración y administración del espacio en disco.(Investigacion)

Configuración y administración del espacio en disco. Para la gestión del almacenamiento de una base de datos existen 4 conceptos bien ...