2013-07-04 10 views
13

Sto utilizzando Django DeleteView in un modello e ho creato un URL & visualizzazione. È possibile saltare il processo di caricamento del modello _confirm_delete e pubblicare immediatamente l'eliminazione.Django DeleteView senza modello di conferma

risposta

34

DeleteView risponde a POST e GET richieste, GET richiesta di conferma modello di visualizzazione, mentre POST cancella esempio.

È possibile inviare POST richiesta, senza la conferma con la forma simile a questo:

<form method="POST" action="{% url "your_delete_url_name" %}"> 
    {% csrf_token %}<input type="submit" value="DELETE"> 
</form> 

Se non si desidera avere un collegamento invece tasto modulo, utilizzare alcuni javascript per fare forma invisibile, che verrà sottoposto a link click.

Non è buona norma usare GET richiesta per l'aggiornamento o la cancellazione, ma se proprio insisti è possibile scorciatoia get metodo nella classe di visualizzazione per post, vale a dire:

def get(self, *args, **kwargs): 
    return self.post(*args, **kwargs) 
+1

Grazie al suo funzionamento soddisfacente con il metodo post. – yaniv14

+0

siete i benvenuti :) – bmihelac

1

Sì, basta cambiare il parametro successivo. Nella risposta di risposta, assicurati che il dizionario che hai inserito abbia qualcosa di simile a questo: { 'next': '/<your_path_here>}/' }, assicurati di confermare le modifiche prima di aggiungere il parametro next. Potresti voler cambiare le funzioni get e post della tua vista.

+0

Non ho alcun GET o POST vista, tutto ciò genera con la DeleteView – yaniv14

+0

Va bene allora, beh non credo che si può cambiare senza cambiare la vostra 'funzione di posto d', e non c'è modo per fare ciò a partire da 1.5 (per quanto a mia conoscenza) guardando la documentazione: https://docs.djangoproject.com/en/1.5/ref/class-based-views/flattened-index/#deleteview. Se non sai come usare le funzioni 'get()' e 'post()' all'interno dei CBV, allora ti suggerisco di conoscerle. –

6

Oppure si può ridefinire get() metodo nel vostro DeleteView:

class YourDeleteView(DeleteView): 

    model = YourModel 
    success_url = '<success_url>' 

    def get(self, request, *args, **kwargs): 
     return self.post(request, *args, **kwargs) 

Ma attenzione con questo, in modo che questo non pregiudica altre funzionalità.

1

Tutto ciò che dovete fare è sovrascrivere il metodo get_success_url della vista di cancellazione. Quindi cancellerà direttamente l'oggetto dal DB. Ad esempio:

class YourView(DeleteView): 
    model = YourModel 

    def get_success_url(self): 
     return reverse('your_redirect_view')