LucasVazquez

formset example

Oct 18th, 2020
653
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. from django.forms import modelformset_factory
  2. from django.shortcuts import render
  3. from django import forms
  4. from app.models import Modelo
  5.  
  6.  
  7. class ModeloForm(forms.ModelForm):
  8.  
  9.     campo_1 = forms.CharField()
  10.     campo_2 = forms.CharField()
  11.  
  12.     class Meta:
  13.         model = Modelo
  14.         fields = ['campo_1', 'campo_2']
  15.  
  16.  
  17. def vista(request):
  18.  
  19.     # Si existe al menos una instancia de nuestro modelo, no agregar un formset extra, de lo contrario sí (para que no inicie el template vacío).
  20.     if Modelo.objects.all().exists():
  21.         extra = 0
  22.     else:
  23.         extra = 1
  24.  
  25.     FormsetFactory = modelformset_factory(Modelo, form=ModeloForm, can_delete=True, extra=extra)
  26.     formset_instance = FormsetFactory(request.POST or None)
  27.    
  28.     if request.POST and formset_instance.is_valid():
  29.  
  30.         # Esta parte se encarga de borrar o guardar un formset.
  31.         # Lo que hace es iterar sobre cada form del formset e ir guardandolo o eliminándolo según corresponda.
  32.         # Otra alternativa es hacer formset_instance.save() directamente
  33.         for formset_form in formset_instance:
  34.             if formset_form.cleaned_data:
  35.                 if formset_form.cleaned_data['DELETE']:
  36.                     formset_form.instance.delete()
  37.                 else:
  38.                     formset_form.save()
  39.  
  40.         # formset_instance.save()
  41.  
  42.     return render(request, 'template.html', {
  43.         'formset_instance': formset_instance,
  44.     })
  45.  
RAW Paste Data