我有一个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?
答案 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)