我正在尝试学习 Django,但发现做相当基本的事情非常困难。我有以下表单类:
from django import forms
class InputForm(forms.Form):
field1 = forms.FloatField(label="First field: ")
field2 = forms.FloatField(label="Second field: ")
class OutputForm(forms.Form):
outfield = forms.FloatField(label="Result: ")
以及以下模板:
<form>
{{ input_form.as_ul }}
<input type="submit" class="btn" value="Submit" name="submit_button">
</form>
<form>
{{ output_form.as_ul }}
</form>
最后是下面的 View :
from django.shortcuts import render
from .forms import InputForm, OutputForm
def index(request):
if request.GET.get('submit_button'):
# ?????
else:
input_form = InputForm()
output_form = OutputForm()
return render(request, 'index.html', {'input_form': input_form,
'output_form': output_form})
我想要发生的是,当我点击提交按钮时,第一个字段和第二个字段中的值被添加并显示在结果字段中。我从调试输出中知道 ?????? commented block 在我按下按钮时运行,但到目前为止我还无法弄清楚如何实际访问或更改我的字段中的数据。我不关心保留这些事务的记录,所以感觉将它们存储在数据库中是非常大材小用的。处理此问题的正确方法是什么?
请您参考如下方法:
这里有几件事在起作用,让我们一一过一遍。
<强> 1。计算输出值 强>
使用请求数据构建表单,验证它,然后计算总和:
if request.GET.get('submit_button'):
input_form = InputForm(request.GET)
if input_form.is_valid():
data = input_form.cleaned_data
result = data["field1"] + data["field2"]
<强> 2。只读输出 强>
目前尚不清楚为什么您要为应用计算的数据使用可提交的表单字段,而不是将结果播放到模板中的常规 html“标签”中。如果您真的想要/需要在表单字段中设置结果,我至少会将其设置为只读。参见 In a Django form, how do I make a field readonly (or disabled) so that it cannot be edited?有关如何执行此操作的示例。
<强> 3。在表单中设置输出数据 强>
将输出表单/字段的初始数据设置为您计算的结果。以下是 (1) 处的代码:
result = data["field1"] + data["field2"]
output_form = OutputForm(initial={"outfield": result})
然后像您已经在做的那样渲染 View :
return render(
request,
'index.html',
{'input_form': input_form, 'output_form': output_form},
)
