Si no conoces Django, aquí tengo un post donde explico un poco lo que es junto con un pequeño proyecto paso a paso. Poco a poco he ido creando varios post de Django por lo que aquí te los dejo todos para que le puedas echar un vistazo :)
Si por otro lado ya conoces este framework, probablemente ya conocerás los conceptos "Model" y "ModelForm" que son imprescindible si quieres almacenar tus datos de tu proyecto Django en base de datos.
El concepto Model
En Django las entidades/tipos de contenido/clases de datos, se agrupan en Models (modelos de datos). Esto es un símil a la clases de Java o PHP o mismamente a los tipos de contenido en Drupal.
Si por ejemplo quieres almacenar la información de un cuadrado, puedes almacenar la distancia de un lado, el perímetro y el área. Para ello crearíamos una clase Cuadrado que extienda el "Model"
El concepto ModelForm
Esto es una especie de extensión del "Model". Es una gran utilidad ya que te permite de una forma muy muy sencilla, extender el Modelo a un formulario web. Usemos el mismo ejemplo del cuadrado anterior: si queremos crear un formulario web para dar de alta cuadrados podríamos:
- Crear una vista custom con todos sus campos y después procesar el formulario POST para crear un nuevo Cuadrado()
- Usar la opción "ModelForm" para exportar el Model a un concepto formulario y poder crear los cuadrados desde ahí
Con esta segunda opción, simplemente con añadir la clase CuadradoFrom que extienda el "ModelForm" ya tendríamos acceso a ese formulario de alta.
Creando el Cuadrado Model
Muy sencillo, aquí os dejo un ejemplo básico con algún comentario para que podáis ir probando.
"""
Cuadrado model para especificar los campos y comportamiento del cuadrado
"""
class Cuadrado(models.Model):
# Definimos los campos de la entidad con unas pequeñas configuraciones por defecto
lado = models.DecimalField(default=0, max_digits=5, decimal_places=2)
perimetro = models.DecimalField(default=0, max_digits=6, decimal_places=2)
area = models.DecimalField(default=0, max_digits=8, decimal_places=2)
#Getter principal de la clase. Especificar qué quieres mostrar del cuadrado
def __str__(self) -> str:
return str(self.id)
# OPCIONAL
# En nuestro podemos permitir que en el formulario se puedan insertar todos los campos o no
# En el caso de que queramos calcular campos en base a los valores al guardar,
# debemos "sobreescribir" la función de guardado por defecto
def save(self, *args, **kwargs):
# Calcularemos en este caso el total del perímetro
perimetro = self.lado * 4
super().save(*args, **kwargs)
Creando el CuadradoForm ModelForm
Si queremos generar de forma automática y directa el formulario, te describo un ejemplo muy sencillo.
"""
CuadradoForm para generar y configurar el fomulario directo
"""
class CuadradoForm(forms.ModelForm):
class Meta:
model = Cuadrado
# Si queremos mostrar en el formulario todos los campos
#fields = "__all__"
# Si quieres excluir algún campo del Model
#exclude = ["exec_date"]
# Especificar qué campos quieres mostrar en el formulario
fields = ["lado", "area"]
# Especificar la etiqueta de cada campo
labels = {
"lado": "Lado del cuadrado (cm)",
"area": "Área del cuadrado (cm2)"
}