Modificar formularios en Django


Al principio iniciar con Django fue algo raro ya que los formularios se generaban de forma automática sin poderlos editar y cuando intenté buscar resultados en stackoverflow me decían que modificara mi archivo forms.py pero no tenía ninguno :'(

Ok vamos, para poder hacer esto es necesario crear un archivo llamado forms.py en nuestra app (al lado de views.py y models.py) y dentro de ese archivo crear nuestra clase formulario.

Ejemplo:

forms.py
#importamos forms de nuestro amado django
from django import forms
from .models import Producto #importamos nuestro modelo

# Clase para nuestro formulario
class ProductoForm(forms.ModelForm):
    #Charfield requerido y su etiqueta en el formulario será "Nombre"
    nombre = forms.CharField(required=True, label="Nombre")
    #Charfield opcional con etiqueta "Código"
    code = forms.CharField(required=False, label="Código")

    #Ejemplo de un textarea no requerido
    descripcion = forms.CharField(
        required=False,
        widget=forms.Textarea,
        label="Descripción"
    )

    class Meta:
        model = Producto # Le asignamos nuestro modelo importado
        fields = ['nombre', 'code', 'descripcion'] #Los campos en el form (los que estaban en views.py)

    # the new bit we're adding
    def __init__(self, *args, **kwargs):
        super(ProductoForm, self).__init__(*args, **kwargs)

Ahora para poder usar este nuevo modulo que hemos creado tenemos que importarlo en nuestro archivo views.py

#al principio del archivo views.py
from .forms import ProductoForm

Y lo asignamos en nuestro CreateView y Updateview (siempre en views.py)
class ProductoCreation(CreateView):
    model = Product
    success_url = reverse_lazy('productos:list'
    #fields = ['nombre', 'code', 'descripcion']  # Esto ya no se usa acá
    form_class = ProductoForm #aca le asignamos nuestra case que creamos en forms.py
    success_url = reverse_lazy('products:list')

class ProductoUpdate(UpdateView):
    model = Product
    #fields = ['nombre', 'code', 'descripcion']  # Esto ya no se usa acá
    form_class = ProductoForm #aca le asignamos nuestra case que creamos en forms.py
    success_url = reverse_lazy('productos:list'

Y.... Listo :D

Lexo

1 comentario:

  1. Play The Real Money Slot Machines - Trick-Taking Game - Trick-Taking
    How casinosites.one to 토토 Play. herzamanindir Play The Real Money Slot Machine. If you are searching for a bsjeon.net fun, casino-roll.com exciting game to play online, we have you covered.

    ResponderEliminar

Instagram