Django的 - 在其他功能使用的输入变量
我试图找到以后使用用户提供的变量的好方法。我已经剥离下来到这个小例子:Django的 - 在其他功能使用的输入变量
models.py
class Input(models.Model):
x = models.IntegerField()
class InputForm(ModelForm):
class Meta:
model = Input
views.py
def input(request):
if request.method == 'POST':
form = InputForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/results')
else:
form = InputForm()
return render_to_response('input.html',
{'form':form}, context_instance=RequestContext(request))
def result(request):
# Here I would like to get the input from the form, e.g.
#
# x = request.GET["x"]
#
# or
#
# inp = InputForm(request.GET)
# x = inp.x
#
# Something like this, so that I can be able to write the line below:
return HttpResponse("x = %f" % x)
什么是推荐的方式做到这一点?
编辑:
的主要问题似乎是,在字典request.GET中在结果函数空,即
def results(request):
return HttpResponse(request.GET)
只显示一个空白页。然后当然request.GET ['x']给出了在QueryDict:{}“中找不到的”Key'x'异常“。我input.html看起来是这样的:
<form method="post" action="">{% csrf_token %}
{{ form }}
<input type="submit" value="Compute" />
</form>
理想情况下,我想能够发送回request.GET中以InputForm,就像在此Fallenangel。原来的答案,但它不工作,因为是request.GET中空。
如果我没有误会你,你想用一个提交的表单的字段值不保存。您可以使用commit=False
,所以,这只会造成使用Meta模型中的对象,但不会将其保存到数据库:
def result(request):
inp = InputForm(request.GET)
if inp.is_valid():
my_obj = inp.save(commit=False) # do not save it to database
return HttpResponse("x = %f" % my_obj.x)
UPDATE:如果你不需要表单验证(因为某些原因),你可以使用字典方法,因为request.POST
和request.GET
是字典对象。 (Request GET and POST objects in Django)。所以:
request.GET['x']
或
request.GET.get('x')
会为你工作。
干杯,这正是我所期待的。我想做一些计算,所以不需要将输入变量存储在数据库中。问题是inp.is_valid()在任何情况下都返回False,即使输入只是一个整数。 – user2064178 2013-02-20 09:27:02
答案已更新。 – FallenAngel 2013-02-20 09:45:05
问题似乎是request.GET是空的,我编辑了主要问题。 – user2064178 2013-02-20 10:45:13
' FallenAngel 2013-02-20 10:35:08
,但我仍然得到了同样的问题; x不是关键。调试页面显示请求方法:GET。 input.html文件应该如何看起来像? – user2064178 2013-02-20 10:59:41
你可以从你的HTML和测试中去掉'{%csrf_token%}'。也许你可能在那里有一些错误配置。另外检查你的URL配置。确保一切正常。 – FallenAngel 2013-02-20 12:12:55