Django-一种模型分为两种形式,如何将两者与ID相关联?

时间:2020-09-01 22:35:22

标签: django django-models django-forms

我有一个Locatario模型,该模型具有两个主要属性:一个模型涉及人的个人属性(第一个表单-LocatarioPfForm),第二个模型涉及我们拥有的民事合同的详细信息(第二个表单-ContratForm)

class LocatarioPfForm(ModelForm):
  class Meta:
    model = Locatario
    fields = ['unidade', 'locatario_nome', 'locatario_genero', 'locatario_rg', 'locatario_cpf', 'locatario_estado_civil', 'locatario_bens', 'locatario_conjuge', 'fiador_boolean', 'fiador_genero', 'fiador_nome', 'fiador_rg', 'fiador_cpf', 'fiador_estado_civil', 'fiador_bens', 'fiador_conjuge']
class ContratoForm(ModelForm):
  class Meta:
    model = Locatario
    fields = ['data_de_inicio', 'data_de_termino', 'valor_bruto', 'valor', 'epoca_pagamento', 'vencimento', 'multa_compensatoria', 'carencia_multa', 'pdf_contrato']
    widgets = {
      'data_de_inicio': DateInput(),
      'data_de_termino': DateInput(),
      'carencia_multa': DateInput(),
    }
    help_texts = {
      'multa_compensatoria': '<span class="text-muted">O Valor da multa pode ser tanto em número absoluto, como aluguéis inteiros (ex: 1300 ou 3900), ou pode ser em porcentagem. No último caso, coloca-se a porcentagem em números decimais. 10% é 0.10, por exemplo.</span>',
    }

在views.py中,我创建了两个视图以引用这两种形式:

def pessoaFisicaCadastro(request, pk):
  loc = locatario_pk(pk)
  form = LocatarioPfForm()
  if request.method == 'POST':
    form = LocatarioPfForm(request.POST)
    if form.is_valid():
     form.save()
     return redirect('contrato-cadastro', pk=pk)


  context = {
    'form': form,

def contratoCadastro(request):
  c_form = ContratoForm()
  if request.method == 'POST':
    c_form = ContratoForm(request.POST, request.FILES)
    if c_form.is_valid():
      c_form.save()
      return redirect('condominio')

  context = {
    'c_form': c_form,
  }
  return render (request, 'cadastro/contrato.html', context)

我的urls.py:

path('cadastro/pessoafisica', 
      views.pessoaFisicaCadastro, 
      name='pessoafisica-cadastro'),
path('cadastro/<int:pk>/contrato', 
      views.contratoCadastro, 
      name='contrato-cadastro'),

这就是我想要做的:我有一个加载LocatarioPfForm的模板(generate.html)。在同一模板中,有一个按钮重定向到另一个模板,contoto.html,该模板加载ContratoForm。但是,当我保存两个对象时,我在数据库中创建了两个不同的对象。

如何将两种形式关联到相同的ID?

1 个答案:

答案 0 :(得分:1)

您可以使用instance=…参数将实例传递给表单:

from django.shortcuts import get_object_or_404

def contratoCadastro(request, pk):
    locatario = get_object_or_404(Locatario, pk=pk)
    c_form = ContratoForm(instance=locatario)
    if request.method == 'POST':
        c_form = ContratoForm(request.POST, request.FILES, instance=locatario)
        if c_form.is_valid():
            c_form.save()
            return redirect('condominio')

    context = {
        'c_form': c_form,
    }
    return render (request, 'cadastro/contrato.html', context)