Django的 - 在其他功能使用的输入变量

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中空。

+0

' FallenAngel 2013-02-20 10:35:08

+0

,但我仍然得到了同样的问题; x不是关键。调试页面显示请求方法:GET。 input.html文件应该如何看起来像? – user2064178 2013-02-20 10:59:41

+0

你可以从你的HTML和测试中去掉'{%csrf_token%}'。也许你可能在那里有一些错误配置。另外检查你的URL配置。确保一切正常。 – FallenAngel 2013-02-20 12:12:55

如果我没有误会你,你想用一个提交的表单的字段值不保存。您可以使用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.POSTrequest.GET是字典对象。 (Request GET and POST objects in Django)。所以:

request.GET['x'] 

request.GET.get('x') 

会为你工作。

+0

干杯,这正是我所期待的。我想做一些计算,所以不需要将输入变量存储在数据库中。问题是inp.is_valid()在任何情况下都返回False,即使输入只是一个整数。 – user2064178 2013-02-20 09:27:02

+0

答案已更新。 – FallenAngel 2013-02-20 09:45:05

+0

问题似乎是request.GET是空的,我编辑了主要问题。 – user2064178 2013-02-20 10:45:13

您可以使用sessions从一个视图到下一个保存值。会话有很多数据存储后端,因此请选择最适合您的体系结构的后端。