将django查询限制为当前会话,并将其传递给函数视图



因此,我试图制作一个计算器,用户可以在其中输入一些数据,然后向他们显示一个视图,为他们提供所需的结果(打印机友好的格式,以便他们可以打印(。

到目前为止我所做的:

创建了一个模型和一个他们按预期工作的表单。

**class CalcModel**(models.Model):
income = models.DecimalField...
civil_status = models.CharField...
have_children = models.CharField..
**class CalcForm**(ModelForm):
class Meta:
**model = Calculate**
fields = ['income', 'civil...]

如果提交的数据有效,则处理表单并重定向到另一个视图的视图:

data_d = {}

def createcalculation(request):
form = CalcForm()
if request.method == 'POST':
form = CalcForm(request.POST)
if form.is_valid():
**data_d['cleaned_data'] = form.cleaned_data**
form.save()
return redirect('res-view')
context = {'c_form': form}
return render(request, 'calc/calc.html', context)

我认为应该有一种方法将模型实例数据传递到重定向用户的视图,但我无法解决。因此,我们非常感谢您的帮助。现在,我正在"手动"传递一个包含表单数据的字典,但它不起作用:

def res_ca(request):
context = data_d
return render(request, 'calc/res_ca.html', context)

我似乎不知道如何将当前会话的数据传递到res_ca视图。

网址如果有帮助:

path('calc', createcalculation, name='calculate'),
path('res/', res_ca, name='res-view'),

根据@vinkomlacic的建议,我找到了一种方法,通过切换到render方法而不是重定向来包含模型实例的id,它就像一个魅力。

if form.is_valid():
messages.success(request, f'Successful!')
item = form.save()
m_data = Calculate.objects.get(id=item.id)
context = {'c_data': form.cleaned_data, 'm_data': m_data}
return render(request, 'calc/res_ca.html', context)

这样,表单就保存了,我可以将模型的实例传递到下一个视图,还可以直接从模型方法向模板添加额外的上下文。

相关内容

最新更新