2010-03-01 1 views
7

È possibile fare in modo che Django elimini automaticamente i moduli non presenti nella richiesta?Elimina dinamicamente i moduli in linea in Django

Quindi, ad esempio, se avessi tre moduli in linea rappresentati in HTML quando ho caricato la mia pagina di modifica e io uso javascript per rimuovere due di quelli quando la richiesta è processi Django vede che quelle due forme non sono più loro e le elimina.

risposta

8

Sì, è possibile utilizzare diversi metodi.

Il primo è copiare il modo in cui è fatto nell'app di amministrazione Django, che è avere una casella di controllo con un'etichetta simile a "Elimina?". Quindi, quando si processa il formset più avanti nella richiesta POST, si controlla se la casella di controllo è True e, in tal caso, si cancella il record. Questo probabilmente non è quello che stai cercando anche se hai usato la parola "dinamicamente" nel titolo della tua domanda :)

Quindi un secondo metodo dinamico sarebbe quello di usare Javascript per "nascondere" il record cancellato sul pagina e impostare la casella di controllo Elimina su Vero. Quindi elaborate il formset allo stesso modo della prima opzione sopra. Vedere django-dynamic-formset per il codice per eliminare formset in questo modo.

Il terzo modo dinamico sarebbe utilizzare Ajax e quando si fa clic sul pulsante Elimina, JS chiama una vista di eliminazione per eliminare il record ed elimina anche il formset dall'HTML. Non posso indicarti alcun codice di esempio per questo, ma penso che il secondo metodo sopra sia comunque migliore perché puoi mantenere tutta la tua autenticazione e il codice di convalida del modulo standard in un unico posto.