Los conjuntos de formularios de Django tienen un atributo empty_form .
formulario_vacío
BaseFormSet proporciona un atributo adicional empty_form que devuelve una instancia de formulario con un prefijo de __prefix__ para facilitar su uso en formularios dinámicos con JavaScript.
La documentación de Django en realidad no dice cómo reemplazar el __prefix__ con Javascript. Varios ejemplos en línea muestran cómo hacerlo con jQuery, pero específicamente quiero hacerlo con Javascript, no con jQuery .
Aquí está el HTML resultante de mi {{ formset.empty_form }} :
<div id="prerequisiteEmptyForm"> <input type="text" name="prerequisites-__prefix__-text" maxlength="100" id="id-prerequisites-__prefix__-text"> <label for="id-prerequisites-__prefix__-DELETE">Delete:</label> <input type="checkbox" name="prerequisites-__prefix__-DELETE" id="id-prerequisites-__prefix__-DELETE"> <input type="hidden" name="prerequisites-__prefix__-id" id="id-prerequisites-__prefix__-id"> <input type="hidden" name="prerequisites-__prefix__-content" value="21" id="id-prerequisites-__prefix__-content"> </div> En todas partes muestra __prefix__ , quiero reemplazarlo con un número... digamos 321 .
Solución correcta:
<div id="prerequisiteEmptyForm"> <input type="text" name="prerequisites-321-text" maxlength="100" id="id-prerequisites-321-text"> <label for="id-prerequisites-321-DELETE">Delete:</label> <input type="checkbox" name="prerequisites-321-DELETE" id="id-prerequisites-321-DELETE"> <input type="hidden" name="prerequisites-321-id" id="id-prerequisites-321-id"> <input type="hidden" name="prerequisites-321-content" value="21" id="id-prerequisites-321-content"> </div>Entonces mi pregunta se convierte en
Usando solo Javascript, ¿cómo reemplazo un valor constante ("__prefix__") con otra cosa ("321") en varios elementos (entradas y etiquetas) dentro de múltiples atributos (nombre, id)? Específicamente, quiero hacerlo limpiamente para repetibilidad. No quiero una solución altamente personalizada para este problema específico. Tiene que ser un enfoque general... ya que esto está reemplazando una constante, ¿seguramente Javascript tiene una forma limpia de hacer esto? Todavía estoy aprendiendo Javascript y tratando de no ser tan dependiente de jQuery.
Usé este concepto:
const emptyForm = document.querySelector('#prerequisiteEmptyForm'); clone = emptyForm.cloneNode(deep=true); clone.innerHTML = clone.innerHTML.replace(/__prefix__/g, '321');