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