Esto es más o menos lo que yo estoy tratando de hacer:Django: ¿cómo agregar un formulario adicional a un formset después de que se ha construido?
def post(request):
VehicleFormSet = formset_factory(StaffVehicleForm)
if request.method == 'POST':
vehicle_formset = VehicleFormSet(request.POST)
if 'add_vehicle' in request.POST:
if vehicle_formset.is_valid():
form_count = vehicle_formset.total_form_count()
vehicle_formset.forms.append(vehicle_formset._construct_form(form_count))
Básicamente, si un usuario hace clic en el botón "Añadir" y su entrada es válida, quiero agregar otro formulario en blanco para el juego de formularios, y ocultar El anterior.
El problema con el código anterior es que no puedo averiguar cómo aumentar total_form_count()
. De la forma en que lo tengo ahora, funcionará una vez, y luego si lo presiona nuevamente, no pasará nada, presumiblemente porque form_count
es el mismo. Tampoco me gusta llamar al _construct_form
y depender de las partes internas.
el atributo '' empty_form' en BaseFormSet' podría ser de utilidad aquí. http://docs.djangoproject.com/en/1.2/topics/forms/formsets/#empty-form "devuelve una instancia de formulario con un prefijo de' __prefix__' para un uso más fácil en formularios dinámicos con JavaScript "Puede mantener eso como una plantilla para clonar, creo. –
No quiero hacerlo en JS aunque ... – mpen
¡Oh, buen consejo, Reiner Gerecke! Definitivamente lo usaré la próxima vez :-) – Humphrey