2013-02-19 4 views
0

나중에 사용자 제공 변수를 사용하는 좋은 방법을 찾으려고합니다. 나는이 최소한의 예에 벗었했습니다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) 

이 작업을 수행하기 위해 권장되는 방법은 무엇입니까?

편집 :

주요 문제는

def results(request): 
    return HttpResponse(request.GET) 

만 빈 페이지를 도시 즉 request.GET의 딕셔너리는 결과 함수 비어 있음을 보인다. 그리고 당연히 request.GET [ 'x']는 "Key 'x'가 QueryDict : {}"에없는 예외를 제공합니다.

<form method="post" action="">{% csrf_token %} 
    {{ form }} 
    <input type="submit" value="Compute" /> 
</form> 

적으로는, 내가이 FallenAngel의 원래의 대답처럼, InputForm 다시 request.GET을 보낼 수 있도록하고 싶습니다,하지만 request.GET 비어 있기 때문에 작동하지 않습니다 : 내 input.html은 다음과 같습니다.

+0

나는 request.POST를 사용해 보았습니다.하지만 여전히 같은 문제가 있습니다. x는 키가 아닙니다. 그리고 디버그 페이지에 Request Method : GET이 표시됩니다. input.html 파일은 이상적으로 어떻게 보이게해야합니까? – user2064178

+0

html과 테스트에서'{% csrf_token %} '을 (를) 삭제할 수 있습니다. 거기에 잘못된 설정이있을 수 있습니다. 또한 URL 구성을 확인하십시오. ther etoo에 모든 것이 올바른지 확인하십시오. – FallenAngel

답변

0

내가 오해하지 않는다면 저장하지 않고 게시 된 양식의 필드 값을 사용하고 싶습니다. 당신은 commit=False 사용할 수 있습니다, 그래서 그것은 단지 메타 모델을 사용하여 객체를 생성하지만, 데이터베이스에 저장되지 않습니다

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

+0

답변이 업데이트되었습니다. – FallenAngel

+0

문제는 request.GET이 비어있는 것 같습니다. 주 질문을 수정했습니다. – user2064178

0

sessions을 사용하면 한 뷰에서 다음 뷰로 값을 보유 할 수 있습니다. 세션에는 데이터 저장 방법에 대한 많은 백엔드가 있으므로 아키텍처에 가장 적합한 세션을 선택하십시오.

관련 문제