Skip to content

Instantly share code, notes, and snippets.

@rg3915
Created February 21, 2024 01:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rg3915/994dfd7fd5ffac3ccd5a0acd3d543108 to your computer and use it in GitHub Desktop.
Save rg3915/994dfd7fd5ffac3ccd5a0acd3d543108 to your computer and use it in GitHub Desktop.
Cria e Edita PessoaFisica e PessoaJuridica com OneToOne com Cliente e usando o mesmo formulário
class ClienteCreateView(CreateView):
model = Cliente
template_name = 'clientes/cliente_form.html'
form_class = ClienteForm
success_url = reverse_lazy('listar_clientes')
def form_valid(self, form):
"""
If the form is valid, save the associated model.
https://ccbv.co.uk/projects/Django/5.0/django.views.generic.edit/CreateView/#form_valid
"""
self.object = form.save()
tipo_cliente = self.object.tipo_cliente
if tipo_cliente == 'PF':
cpf = form.cleaned_data.get('cpf')
data_nascimento = form.cleaned_data.get('data_nascimento')
PessoaFisica.objects.create(
cliente=self.object,
cpf=cpf,
data_nascimento=data_nascimento,
)
else:
cnpj = form.cleaned_data.get('cnpj')
razao_social = form.cleaned_data.get('razao_social')
PessoaJuridica.objects.create(
cliente=self.object,
cnpj=cnpj,
razao_social=razao_social,
)
return super().form_valid(form)
class ClienteUpdateView(UpdateView):
model = Cliente
template_name = 'clientes/cliente_form.html'
form_class = ClienteForm
success_url = reverse_lazy('listar_clientes')
def get_initial(self):
obj = self.get_object()
# Reescreve os valores iniciais do objeto.
fields = [field.name for field in obj._meta.fields]
# e popula novamente
initial = {field: getattr(obj, field) for field in fields}
if initial['tipo_cliente'] == 'PF':
pessoa_fisica = get_object_or_404(PessoaFisica, cliente=obj)
initial['cpf'] = pessoa_fisica.cpf
initial['data_nascimento'] = pessoa_fisica.data_nascimento
else:
pessoa_juridica = get_object_or_404(PessoaJuridica, cliente=obj)
initial['cnpj'] = pessoa_juridica.cnpj
initial['razao_social'] = pessoa_juridica.razao_social
return initial
def form_valid(self, form):
"""
If the form is valid, save the associated model.
https://ccbv.co.uk/projects/Django/5.0/django.views.generic.edit/CreateView/#form_valid
"""
self.object = form.save()
tipo_cliente = self.object.tipo_cliente
if tipo_cliente == 'PF':
cpf = form.cleaned_data.get('cpf')
data_nascimento = form.cleaned_data.get('data_nascimento')
pessoa_fisica = get_object_or_404(PessoaFisica, cliente=self.object)
pessoa_fisica.cpf = cpf
pessoa_fisica.data_nascimento = data_nascimento
pessoa_fisica.save()
else:
cnpj = form.cleaned_data.get('cnpj')
razao_social = form.cleaned_data.get('razao_social')
pessoa_juridica = get_object_or_404(PessoaJuridica, cliente=self.object)
pessoa_juridica.cnpj = cnpj
pessoa_juridica.razao_social = razao_social
pessoa_juridica.save()
return super().form_valid(form)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment