Lors de la gestion d'une soumission de formulaire, je dois effectuer une logique personnalisée (contacter le service Web, etc.). En cas d'échec je veux empêcher la création d'une nouvelle instance du modèle Car.Retour de form_valid() de CreateView sans enregistrer une instance
Montrons par un simple extrait:
from django.views import generic
from django.http import HttpResponseRedirect
class CarCreateView(generic.edit.CreateView):
model = Car
form_class = CarForm
def form_valid(self, form):
# some logic that may succeed or fail
if success:
messages.success(self.request, 'bla bla')
return super().form_valid(form)
else:
messages.error(self.request, 'blabla')
# How to return to form index without saving???
return HttpResponseRedirect(self.get_success_url())
Ne pas appeler super().form_valid(form)
ne suffit pas. Une nouvelle voiture est toujours en cours d'enregistrement. Des idées?
Non. 'form_invalid' est responsable du traitement des erreurs pendant le traitement du formulaire, pas après. En fait, comme je comprends, on ne devrait jamais appeler 'super(). Form_invalid (form)' dans sa méthode 'form_valid()' (ce qui signifie que la forme était valide) – chefarov