No front, quando o usuário tem permissão de inserir algo para persistir o banco, também é possível utilizar este recurso. Vejamos como:
views.py
class SuaClasseCreateView(CreateView):
form_class = SuaClasseForm
success_url = '/url-de-sucesso/'
template_name = 'form.html'
model = SuaClasse
def post(self, request, *args, **kwargs):
form_class = self.get_form_class()
form = self.get_form(form_class)
if form.is_valid():
if request.POST.get('_addanother'):
self.success_url = '/url-de-nova-insercao/'
return self.form_valid(form)
else:
return self.form_invalid(form)
def form_valid(self, form):
form.save()
return HttpResponseRedirect(self.success_url)
def form_invalid(self, form):
return self.render_to_response(
self.get_context_data(form=form)
)
class SuaClasseUpdateView(UpdateView):
form_class = SuaClasseForm
model = SuaClasse
success_url = '/url-de-sucesso/'
template_name = 'form.html'
def post(self, request, *args, **kwargs):
self.object = self.get_object()
form_class = self.get_form_class()
form = self.get_form(form_class)
form.instance = self.object
if form.is_valid():
if request.POST.get('_addanother'):
self.success_url = '/url-de-nova-insercao/'
return self.form_valid(form)
else:
return self.form_invalid(form)
def form_valid(self, form):
form.save()
return HttpResponseRedirect(self.success_url)
def form_invalid(self, form):
return self.render_to_response(
self.get_context_data(form=form)
)
As views acima funcionam para qualquer modelo, sem nenhuma alteração nos forms.py. No html, apenas é necessário incluir o botão de Salvar e adicionar outro como exemplo abaixo:
form.html
<input type="submit" name="_addanother" value="Salvar e adicionar outro(a)">
Quando o clique é feito neste botão, o value dele é enviado via post, e a tratativa disso está no método post da view. Quando não é clicado, o valor não é enviado, não redirecionando assim para uma nova tela com o formulário aberto.
hasta!
Nenhum comentário:
Postar um comentário