Django-一个模型分为两种形式,我如何将两者与ID联系起来



我有一个Locatario模型,它有两个主要属性:一个涉及个人属性(第一种形式-LocaarioPfForm(,另一个涉及我们所拥有的民事合同的详细信息(第二种形式-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)

我的网址.py:

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

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

如何将这两个表单与同一ID关联起来?

将实例传递给带有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)

最新更新