diff --git a/parlamentares/forms.py b/parlamentares/forms.py index 9faa5df27..58b68bf05 100644 --- a/parlamentares/forms.py +++ b/parlamentares/forms.py @@ -266,6 +266,66 @@ class FiliacaoForm(ModelForm): 'data', 'data_desfiliacao'] + # def clean(self): + # cleaned_data = super(FiliacaoForm, self).clean() + # + # data_filiacao = cleaned_data['data'] + # data_desfiliacao = cleaned_data['data_desfiliacao'] + # + # # Dá erro caso a data de desfiliação seja anterior a de filiação + # if data_desfiliacao and data_desfiliacao < data_filiacao: + # error_msg = _("A data de filiação não pode anterior \ + # à data de desfiliação") + # raise forms.ValidationError(error_msg) + # return cleaned_data + # + # filiacao = self.instance + # parlamentar = filiacao.parlamentar + # + # # Esse bloco garante que não haverá intersecção entre os + # # períodos de filiação + # id_filiacao_atual = filiacao.pk + # todas_filiacoes = parlamentar.filiacao_set.all() + # + # # Nenhuma filiacao + # if not todas_filiacoes: + # return cleaned_data + # + # error_msg = None + # for filiacoes in todas_filiacoes: + # if filiacoes.id != id_filiacao_atual: + # + # data_init = filiacoes.data + # data_fim = filiacoes.data_desfiliacao + # + # if data_init <= data_filiacao < data_fim: + # + # error_msg = _("A data de filiação e \ + # desfiliação não podem estar no intervalo \ + # de outro período de filiação") + # break + # + # if (data_desfiliacao and + # data_init < data_desfiliacao < data_fim): + # + # error_msg = _("A data de filiação e \ + # desfiliação não podem estar no intervalo \ + # de outro período de filiação") + # break + # + # if (data_desfiliacao and + # data_filiacao <= data_init and + # data_desfiliacao >= data_fim): + # + # error_msg = _("A data de filiação e \ + # desfiliação não podem estar no intervalo \ + # de outro período de filiação") + # break + # + # if error_msg: + # raise forms.ValidationError(error_msg) + # + def __init__(self, *args, **kwargs): row1 = crispy_layout_mixin.to_row( @@ -293,3 +353,69 @@ class FiliacaoEditForm(FiliacaoForm): HTML(' '), Submit('excluir', 'Excluir', css_class='btn btn-primary')]) + + # def clean(self): + # cleaned_data = super(FiliacaoEditForm, self).clean() + # + # data_filiacao = cleaned_data['data'] + # data_desfiliacao = cleaned_data['data_desfiliacao'] + # + # # Dá erro caso a data de desfiliação seja anterior a de filiação + # if data_desfiliacao and data_desfiliacao < data_filiacao: + # error_msg = _("A data de filiação não pode anterior \ + # à data de desfiliação") + # raise forms.ValidationError(error_msg) + # + # return cleaned_data + # + # filiacao = self.instance + # parlamentar = Parlamentar.objects.get(pk=self.kwargs['pk']) + # + # # Esse bloco garante que não haverá intersecção entre os + # # períodos de filiação + # id_filiacao_atual = filiacao.pk + # todas_filiacoes = parlamentar.filiacao_set.all() + # + # # ainda filiado + # for f in todas_filiacoes: + # if not f.data_desfiliacao: + # error_msg = _("O parlamentar não pode se filiar a algum partido \ + # sem antes se desfiliar do partido anterior") + # raise forms.ValidationError(error_msg) + # + # # Esse bloco garante que não haverá intersecção entre os + # # períodos de filiação + # error_msg = None + # for filiacoes in todas_filiacoes: + # if filiacoes.id != id_filiacao_atual: + # + # data_init = filiacoes.data + # data_fim = filiacoes.data_desfiliacao + # + # if data_init <= data_filiacao < data_fim: + # + # error_msg = _("A data de filiação e \ + # desfiliação não podem estar no intervalo \ + # de outro período de filiação") + # break + # + # if (data_desfiliacao and + # data_init < data_desfiliacao < data_fim): + # + # error_msg = _("A data de filiação e \ + # desfiliação não podem estar no intervalo \ + # de outro período de filiação") + # break + # + # if (data_desfiliacao and + # data_filiacao <= data_init and + # data_desfiliacao >= data_fim): + # + # error_msg = _("A data de filiação e \ + # desfiliação não podem estar no intervalo \ + # de outro período de filiação") + # break + # + # if error_msg: + # raise forms.ValidationError(error_msg) + # diff --git a/parlamentares/views.py b/parlamentares/views.py index bc612d0a6..2adf2e223 100644 --- a/parlamentares/views.py +++ b/parlamentares/views.py @@ -1,9 +1,10 @@ import os from django.contrib import messages -from django.core.urlresolvers import reverse +from django.core.urlresolvers import reverse, reverse_lazy from django.utils.translation import ugettext_lazy as _ -from django.views.generic import FormView +from django.views.generic import CreateView, FormView, UpdateView +from django.http import HttpResponseRedirect from crud.base import Crud @@ -105,171 +106,115 @@ class ParlamentaresView(FormView): 'parlamentares': parlamentares}) -class ParlamentaresCadastroView(FormView): +class ParlamentaresCadastroView(CreateView): template_name = "parlamentares/parlamentares_cadastro.html" - - def get_success_url(self): - return reverse('parlamentares') - - def get(self, request, *args, **kwargs): - form = ParlamentaresForm() - - pk = kwargs['pk'] - return self.render_to_response({'form': form, 'legislatura_id': pk}) - - def post(self, request, *args, **kwargs): - form = ParlamentaresForm(request.POST) - - pk = kwargs['pk'] - - if form.is_valid(): - parlamentar = form.save(commit=False) - if 'fotografia' in request.FILES: - parlamentar.fotografia = request.FILES['fotografia'] - parlamentar.biografia = form.data['biografia'] - parlamentar.save() - - mandato = Mandato() - mandato.parlamentar = parlamentar - mandato.legislatura = Legislatura.objects.get(id=pk) - mandato.save() - return self.form_valid(form) - else: - return self.render_to_response( - {'form': form, 'legislatura_id': pk}) - - -class ParlamentaresEditarView(FormView): + form_class = ParlamentaresForm + model = Parlamentar + success_url = reverse_lazy('parlamentares') + + def get_context_data(self, **kwargs): + context = super(ParlamentaresCadastroView, self).get_context_data(**kwargs) + legislatura_id = self.kwargs['pk'] + # precisa de legislatura id? + context.update({'legislatura_id': legislatura_id}) + return context + + def form_valid(self, form): + form.save() + mandato = Mandato() + mandato.parlamentar = form.instance + mandato.legislatura = Legislatura.objects.get(id=self.kwargs['pk']) + mandato.save() + return HttpResponseRedirect(self.get_success_url()) + + +class ParlamentaresEditarView(UpdateView): template_name = "parlamentares/parlamentares_cadastro.html" + form_class = ParlamentaresEditForm + model = Parlamentar + success_url = reverse_lazy('parlamentares') + + def form_valid(self, form): + parlamentar = form.instance + if 'salvar' in self.request.POST: + form.save() + elif 'excluir' in self.request.POST: + Mandato.objects.get(parlamentar=parlamentar).delete() + parlamentar.delete() + elif "remover-foto" in self.request.POST: + try: + os.unlink(parlamentar.fotografia.path) + except OSError: + pass # Should log this error!!!!! + parlamentar.fotografia = None + parlamentar.save() + return HttpResponseRedirect(self.get_success_url()) - def get_success_url(self): - return reverse('parlamentares') - - def get(self, request, *args, **kwargs): - pk = kwargs['pk'] - parlamentar = Parlamentar.objects.get(pk=pk) - form = ParlamentaresEditForm(instance=parlamentar) - return self.render_to_response( - {'form': form, 'object': parlamentar}) - - def post(self, request, *args, **kwargs): - pk = kwargs['pk'] - parlamentar = Parlamentar.objects.get(pk=pk) - form = ParlamentaresEditForm(request.POST, instance=parlamentar) - - if form.is_valid(): - if 'salvar' in request.POST: - parlamentar = form.save(commit=False) - if 'fotografia' in request.FILES: - parlamentar.fotografia = request.FILES['fotografia'] - parlamentar.biografia = form.data['biografia'] - parlamentar.save() - elif 'excluir' in request.POST: - Mandato.objects.get(parlamentar=parlamentar).delete() - parlamentar.delete() - elif "remover" in request.POST: - try: - os.unlink(parlamentar.fotografia.path) - except OSError: - pass # Should log this error!!!!! - parlamentar = form.save(commit=False) - parlamentar.fotografia = None - parlamentar.save() - return self.form_valid(form) - else: - return self.render_to_response({'form': form}) - - -class ParlamentaresDependentesView(FormView): +class ParlamentaresDependentesView(CreateView): template_name = "parlamentares/parlamentares_dependentes.html" + form_class = DependenteForm + model = Dependente def get_success_url(self): pk = self.kwargs['pk'] return reverse('parlamentares_dependentes', kwargs={'pk': pk}) - def get(self, request, *args, **kwargs): - pid = kwargs['pk'] - parlamentar = Parlamentar.objects.get(id=pid) + def get_context_data(self, **kwargs): + context = super(ParlamentaresDependentesView, self).\ + get_context_data(**kwargs) + pk = self.kwargs['pk'] + parlamentar = Parlamentar.objects.get(pk=pk) dependentes = Dependente.objects.filter( parlamentar=parlamentar).order_by('nome', 'tipo') - - form = DependenteForm() - - return self.render_to_response( - {'object': parlamentar, - 'dependentes': dependentes, - 'form': form, - 'legislatura_id': parlamentar.mandato_set.last().legislatura.id}) - - def post(self, request, *args, **kwargs): - form = DependenteForm(request.POST) - - if form.is_valid(): - dependente = form.save(commit=False) - - pid = kwargs['pk'] - parlamentar = Parlamentar.objects.get(id=pid) - dependente.parlamentar = parlamentar - - dependente.save() - return self.form_valid(form) - else: - pid = kwargs['pk'] - parlamentar = Parlamentar.objects.get(id=pid) - dependentes = Dependente.objects.filter( - parlamentar=parlamentar).order_by('nome', 'tipo') - - return self.render_to_response( - {'object': parlamentar, - 'dependentes': dependentes, - 'form': form, - 'legislatura_id': parlamentar.mandato_set.last( - ).legislatura.id}) - - -class ParlamentaresDependentesEditView(FormView): + context.update({'object': parlamentar, + 'dependentes': dependentes, + # precisa de legislatura_id??? + 'legislatura_id': + parlamentar.mandato_set.last().legislatura.id}) + return context + + def form_valid(self, form): + parlamentar_id = self.kwargs['pk'] + dependente = form.save(commit=False) + parlamentar = Parlamentar.objects.get(id=parlamentar_id) + dependente.parlamentar = parlamentar + dependente.save() + return HttpResponseRedirect(self.get_success_url()) + + +class ParlamentaresDependentesEditView(UpdateView): template_name = "parlamentares/parlamentares_dependentes_edit.html" + form_class = DependenteEditForm + model = Dependente + pk_url_kwarg = 'dk' def get_success_url(self): pk = self.kwargs['pk'] return reverse('parlamentares_dependentes', kwargs={'pk': pk}) - def get(self, request, *args, **kwargs): - dependente = Dependente.objects.get(id=kwargs['dk']) - parlamentar = Parlamentar.objects.get(id=kwargs['pk']) - form = DependenteEditForm(instance=dependente) - return self.render_to_response( - {'form': form, - 'object': parlamentar, - 'legislatura_id': dependente.parlamentar.mandato_set.last( - ).legislatura_id}) - - def post(self, request, *args, **kwargs): - dependente = Dependente.objects.get(id=kwargs['dk']) - form = DependenteEditForm(request.POST, instance=dependente) - parlamentar = Parlamentar.objects.get(id=kwargs['pk']) - - if form.is_valid(): - - if 'salvar' in request.POST: - dependente.save() - elif 'excluir' in request.POST: - dependente.delete() - return self.form_valid(form) - else: - return self.render_to_response( - {'form': form, - 'object': parlamentar, - 'legislatura_id': dependente.parlamentar.mandato_set.last( - ).legislatura_id}) + def get_context_data(self, **kwargs): + context = super(ParlamentaresDependentesEditView, self).\ + get_context_data(**kwargs) + parlamentar = Parlamentar.objects.get(id=self.kwargs['pk']) + context.update({ + 'object': parlamentar, + 'legislatura_id': parlamentar.mandato_set.last( + ).legislatura_id}) + return context + + def form_valid(self, form): + if 'salvar' in self.request.POST: + form.save() + elif 'excluir' in self.request.POST: + dependente = form.instance + dependente.delete() + return HttpResponseRedirect(self.get_success_url()) class MesaDiretoraView(FormView): template_name = "mesa_diretora/mesa_diretora.html" - - def get_success_url(self): - return reverse('mesa_diretora') + success_url = reverse_lazy('mesa_diretora') # Essa função avisa quando se pode compor uma Mesa Legislativa) def validation(self, request): @@ -335,6 +280,7 @@ class MesaDiretoraView(FormView): composicao.save() return self.form_valid(form=None) + elif 'Excluir' in request.POST: if (not Legislatura.objects.all() or @@ -380,320 +326,202 @@ class MesaDiretoraView(FormView): }) -class FiliacaoView(FormView): +class FiliacaoView(CreateView): template_name = "parlamentares/parlamentares_filiacao.html" + form_class = FiliacaoForm + model = Filiacao def get_success_url(self): pk = self.kwargs['pk'] return reverse('parlamentares_filiacao', kwargs={'pk': pk}) - def get(self, request, *args, **kwargs): - pid = kwargs['pk'] + def get_context_data(self, **kwargs): + context = super(FiliacaoView, self).get_context_data(**kwargs) + pid = self.kwargs['pk'] parlamentar = Parlamentar.objects.get(id=pid) - filiacoes = Filiacao.objects.filter( - parlamentar=parlamentar) - - form = FiliacaoForm() - - return self.render_to_response( - {'object': parlamentar, - 'filiacoes': filiacoes, - 'form': form, - 'legislatura_id': parlamentar.mandato_set.last().legislatura.id}) - - # Função usada para todos os caso de erro na filiação - def error_message(self, parlamentar, form, mensagem, request): filiacoes = Filiacao.objects.filter(parlamentar=parlamentar) - messages.add_message(request, messages.INFO, mensagem) - return self.render_to_response( + context.update( {'object': parlamentar, 'filiacoes': filiacoes, - 'form': form, - 'legislatura_id': parlamentar.mandato_set.last( - ).legislatura.id}) + # precisa???? + 'legislatura_id': parlamentar.mandato_set.last().legislatura.id}) + return context - def post(self, request, *args, **kwargs): - form = FiliacaoForm(request.POST) + def validate(self, form, parlamentar, filiacao): + from django.core.exceptions import ValidationError - if form.is_valid(): + data_filiacao = form.cleaned_data['data'] + data_desfiliacao = form.cleaned_data['data_desfiliacao'] - data_filiacao = form.cleaned_data['data'] - data_desfiliacao = form.cleaned_data['data_desfiliacao'] + # Dá erro caso a data de desfiliação seja anterior a de filiação + if data_desfiliacao and data_desfiliacao < data_filiacao: + error_msg = _("A data de filiação não pode anterior \ + à data de desfiliação") + messages.add_message(request, messages.ERROR, error_msg) + return False - filiacao = form.save(commit=False) - pid = kwargs['pk'] - parlamentar = Parlamentar.objects.get(id=pid) - - candidato_filiado = Filiacao.objects.filter( - parlamentar=parlamentar) - - candidato_nao_desfiliou = Filiacao.objects.filter( - parlamentar=parlamentar, - data_desfiliacao=None) - - # Vê se o candidato já se filiou alguma vez a algum partido - if not candidato_filiado: - filiacao = form.save(commit=False) - filiacao.parlamentar = parlamentar - filiacao.save() - return self.form_valid(form) - else: - # Dá erro caso não tenha se desfiliado do anterior - if candidato_nao_desfiliou: - mensagem = _("Você não pode se filiar a algum partido \ - sem antes se desfiliar do partido anterior") - return self.error_message( - parlamentar, form, mensagem, request) - - # Dá erro caso a data de desfiliação seja anterior a de - # filiação - if data_desfiliacao and data_desfiliacao < data_filiacao: - mensagem = _("A data de filiação não pode ser \ - anterior à data de desfiliação") - return self.error_message( - parlamentar, form, mensagem, request) - - # Esse bloco garante que não haverá intersecção entre os - # períodos de filiação - todas_filiacoes = candidato_filiado - for i in range(len(todas_filiacoes)): - data_init = todas_filiacoes[i].data - data_fim = todas_filiacoes[i].data_desfiliacao - if data_filiacao >= data_init and data_filiacao < data_fim: - mensagem = _("A data de filiação e \ - desfiliação não podem estar no intervalo \ - de outro período de filiação") - return self.error_message( - parlamentar, form, mensagem, request) - - if (data_desfiliacao and - data_desfiliacao < data_fim and - data_desfiliacao > data_init): - - mensagem = _("A data de filiação e \ - desfiliação não podem estar no intervalo \ - de outro período de filiação") - return self.error_message( - parlamentar, form, mensagem, request) - - if (data_desfiliacao and - data_filiacao <= data_init and - data_desfiliacao >= data_fim): - mensagem = _("A data de filiação e \ - desfiliação não podem estar no intervalo \ - de outro período de filiação") - return self.error_message( - parlamentar, form, mensagem, request) - - # Salva a nova filiação caso tudo esteja correto - else: - filiacao = form.save(commit=False) - filiacao.parlamentar = parlamentar - filiacao.save() - return self.form_valid(form) - else: - pid = kwargs['pk'] - parlamentar = Parlamentar.objects.get(id=pid) - mensagem = "" - return self.error_message( - parlamentar, form, mensagem, request) + # Esse bloco garante que não haverá intersecção entre os + # períodos de filiação + id_filiacao_atual = filiacao.pk + todas_filiacoes = parlamentar.filiacao_set.all() -class FiliacaoEditView(FormView): - template_name = "parlamentares/parlamentares_filiacao_edit.html" + # # Nenhuma filiacao + # if not todas_filiacoes: + # return None - def get_success_url(self): - pk = self.kwargs['pk'] - return reverse('parlamentares_filiacao', kwargs={'pk': pk}) + for f in todas_filiacoes: + if not f.data_desfiliacao: + error_msg = _("O parlamentar não pode se filiar a algum partido \ + sem antes se desfiliar do partido anterior") + messages.add_message(request, messages.ERROR, error_msg) + return False - def get(self, request, *args, **kwargs): - filiacao = Filiacao.objects.get(id=kwargs['dk']) - parlamentar = Parlamentar.objects.get(id=kwargs['pk']) - form = FiliacaoEditForm(instance=filiacao) - return self.render_to_response( - {'form': form, - 'object': parlamentar, - 'legislatura_id': parlamentar.mandato_set.last( - ).legislatura_id}) + error_msg = None + for filiacoes in todas_filiacoes: + if filiacoes.id != id_filiacao_atual: - def error_message(self, parlamentar, form, mensagem, request): - messages.add_message(request, messages.INFO, mensagem) - return self.render_to_response( - {'form': form, - 'object': parlamentar, - 'legislatura_id': parlamentar.mandato_set.last( - ).legislatura_id}) + data_init = filiacoes.data + data_fim = filiacoes.data_desfiliacao - def post(self, request, *args, **kwargs): - filiacao = Filiacao.objects.get(id=kwargs['dk']) - form = FiliacaoEditForm(request.POST, instance=filiacao) - parlamentar = Parlamentar.objects.get(id=kwargs['pk']) - - if form.is_valid(): - - data_filiacao = form.cleaned_data['data'] - data_desfiliacao = form.cleaned_data['data_desfiliacao'] + if data_init <= data_filiacao < data_fim: - filiacao = form.save(commit=False) - pid = kwargs['pk'] - parlamentar = Parlamentar.objects.get(id=pid) - - candidato_filiado = Filiacao.objects.filter( - parlamentar=parlamentar) - - if 'excluir' in request.POST: - filiacao.delete() - return self.form_valid(form) - - # Vê se o candidato já se filiou alguma vez a algum partido - if not candidato_filiado: - filiacao = form.save(commit=False) - filiacao.parlamentar = parlamentar - filiacao.save() - return self.form_valid(form) - else: - - # Dá erro caso a data de desfiliação seja anterior a de - # filiação - if data_desfiliacao and data_desfiliacao < data_filiacao: - mensagem = _("A data de filiação não pode \ - anterior à data de desfiliação") - return self.error_message( - parlamentar, form, mensagem, request) - - # Esse bloco garante que não haverá intersecção entre os - # períodos de filiação - todas_filiacoes = candidato_filiado - id_filiacao_atual = int(kwargs['dk']) - for i in range(len(todas_filiacoes)): - if todas_filiacoes[i].id != id_filiacao_atual: - data_init = todas_filiacoes[i].data - data_fim = todas_filiacoes[i].data_desfiliacao - if (data_filiacao >= data_init and - data_filiacao < data_fim): - - mensagem = _("A data de filiação e \ + error_msg = _("A data de filiação e \ desfiliação não podem estar no intervalo \ de outro período de filiação") - return self.error_message(parlamentar, - form, - mensagem, - request) + break - if (data_desfiliacao and - data_desfiliacao < data_fim and - data_desfiliacao > data_init): + if (data_desfiliacao and + data_init < data_desfiliacao < data_fim): - mensagem = _("A data de filiação e \ + error_msg = _("A data de filiação e \ desfiliação não podem estar no intervalo \ de outro período de filiação") - return self.error_message(parlamentar, - form, - mensagem, - request) - if (data_desfiliacao and - data_filiacao <= data_init and - data_desfiliacao >= data_fim): - mensagem = _("A data de filiação e \ + break + + if (data_desfiliacao and + data_filiacao <= data_init and + data_desfiliacao >= data_fim): + + error_msg = _("A data de filiação e \ desfiliação não podem estar no intervalo \ de outro período de filiação") - return self.error_message(parlamentar, - form, - mensagem, - request) - - if 'salvar' in request.POST: - filiacao.save() - elif 'excluir' in request.POST: - filiacao.delete() - return self.form_valid(form) + break + if error_msg: + messages.add_message(request, messages.ERROR, error_msg) + return False else: - return self.render_to_response( - {'form': form, - 'object': parlamentar, - 'legislatura_id': parlamentar.mandato_set.last( - ).legislatura_id}) + return True + + + + def form_valid(self, form): + + if 'salvar' in self.request.POST: + filiacao = form.save(commit=False) + parlamentar = Parlamentar.objects.get(id=self.kwargs['pk']) + filiacao.parlamentar = parlamentar + + if not self.validate(form, parlamentar, filiacao): + return self.form_invalid(form) + + filiacao.save() + + return HttpResponseRedirect(self.get_success_url()) +class FiliacaoEditView(UpdateView): + template_name = "parlamentares/parlamentares_filiacao_edit.html" + form_class = FiliacaoEditForm + model = Filiacao + pk_url_kwarg = 'dk' + + def get_success_url(self): + pk = self.kwargs['pk'] + return reverse('parlamentares_filiacao', kwargs={'pk': pk}) -class MandatoView(FormView): + def get_context_data(self, **kwargs): + context = super(FiliacaoEditView, self).get_context_data(**kwargs) + parlamentar = Parlamentar.objects.get(id=self.kwargs['pk']) + context.update( + {'object': parlamentar, + # precisa de legislatura???? + 'legislatura_id': parlamentar.mandato_set.last( + ).legislatura_id}) + return context + + def form_valid(self, form): + filiacao = form.save(commit=False) + if 'excluir' in self.request.POST: + filiacao.delete() + elif 'salvar' in self.request.POST: + parlamentar = Parlamentar.objects.get(id=self.kwargs['pk']) + filiacao.parlamentar = parlamentar + filiacao.save() + return HttpResponseRedirect(self.get_success_url()) + +class MandatoView(CreateView): template_name = "parlamentares/parlamentares_mandato.html" + model = Mandato + form_class = MandatoForm def get_success_url(self): pk = self.kwargs['pk'] return reverse('parlamentares_mandato', kwargs={'pk': pk}) - def get(self, request, *args, **kwargs): - pid = kwargs['pk'] + def get_context_data(self, **kwargs): + context = super(MandatoView, self).get_context_data(**kwargs) + pid = self.kwargs['pk'] parlamentar = Parlamentar.objects.get(id=pid) mandatos = Mandato.objects.filter( parlamentar=parlamentar) - - form = MandatoForm() - - return self.render_to_response( + context.update( {'object': parlamentar, 'mandatos': mandatos, - 'form': form, - 'legislatura_id': parlamentar.mandato_set.last().legislatura.id}) - - def post(self, request, *args, **kwargs): - form = MandatoForm(request.POST) - - if form.is_valid(): - mandato = form.save(commit=False) - - pid = kwargs['pk'] - parlamentar = Parlamentar.objects.get(id=pid) - mandato.parlamentar = parlamentar - - mandato.save() - return self.form_valid(form) - else: - pid = kwargs['pk'] - parlamentar = Parlamentar.objects.get(id=pid) - mandatos = Mandato.objects.filter( - parlamentar=parlamentar) - - return self.render_to_response( - {'object': parlamentar, - 'mandatos': mandatos, - 'form': form, - 'legislatura_id': parlamentar.mandato_set.last( - ).legislatura.id}) + # precisa de legislatura ? + #'legislatura_id': parlamentar.mandato_set.last().legislatura.id + } + ) + return context + + def form_valid(self, form): + pid = self.kwargs['pk'] + parlamentar = Parlamentar.objects.get(id=pid) + mandato = form.save(commit=False) + mandato.parlamentar = parlamentar + mandato.save() + return HttpResponseRedirect(self.get_success_url()) -class MandatoEditView(FormView): +class MandatoEditView(UpdateView): template_name = "parlamentares/parlamentares_mandato_edit.html" + model = Mandato + form_class = MandatoEditForm + pk_url_kwarg = 'dk' def get_success_url(self): pk = self.kwargs['pk'] return reverse('parlamentares_mandato', kwargs={'pk': pk}) - def get(self, request, *args, **kwargs): - mandato = Mandato.objects.get(id=kwargs['dk']) - parlamentar = Parlamentar.objects.get(id=kwargs['pk']) - form = MandatoEditForm(instance=mandato) - return self.render_to_response( - {'form': form, - 'object': parlamentar, + def get_context_data(self, **kwargs): + context = super(MandatoEditView, self).get_context_data(**kwargs) + mandato = Mandato.objects.get(id=self.kwargs['dk']) + parlamentar = Parlamentar.objects.get(id=self.kwargs['pk']) + context.update( + {'object': parlamentar, + # precisa de legislatura_id ??? 'legislatura_id': parlamentar.mandato_set.last( ).legislatura_id}) + return context - def post(self, request, *args, **kwargs): - mandato = Mandato.objects.get(id=kwargs['dk']) - form = MandatoEditForm(request.POST, instance=mandato) - parlamentar = Parlamentar.objects.get(id=kwargs['pk']) - - if form.is_valid(): - if 'salvar' in request.POST: - mandato.save() - elif 'excluir' in request.POST: - mandato.delete() - return self.form_valid(form) - else: - return self.render_to_response( - {'form': form, - 'object': parlamentar, - 'legislatura_id': parlamentar.mandato_set.last( - ).legislatura_id}) + def form_valid(self, form): + form = self.get_form() + parlamentar = Parlamentar.objects.get(id=self.kwargs['pk']) + if 'salvar' in self.request.POST: + mandato = form.save(commit=False) + mandato.parlamentar = parlamentar + mandato.save() + elif 'excluir' in self.request.POST: + form.instance.delete() + + return HttpResponseRedirect(self.get_success_url())