Estoy tratando de recorrer formularios en un formset en mi plantilla. Y he visto dos formas diferentes de hacer esto y no parece hacer una diferencia en mi código, cuál uso.
{{ formset.management_form }} {% for form in formset %} {{ form }} {% endfor %}Y...
{{ formset.management_form }} {% for form in formset.forms %} {{ form }} {% endfor %}¿Esto hace alguna diferencia? ¿Por qué poner .forms al final?
De acuerdo con la fuente de la clase BaseFormset :
def __iter__(self): """Yields the forms in the order they should be rendered""" return iter(self.forms) @cached_property def forms(self): """ Instantiate forms at first property access. """ # DoS protection is included in total_form_count() forms = [self._construct_form(i, **self.get_form_kwargs(i)) for i in range(self.total_form_count())] return forms Ambos métodos ( for form in formset y for form in formset.forms ) son idénticos.
Verá, el __iter__ que se usa para el ciclo for produce cada vez que se self.forms . Por otro lado, el for form in formset.forms itera sobre lo mismo, self.forms .