2016-09-04 4 views
-1

사용자에게 일부 데이터를 표시한다고 가정하고 사용자가 GET 양식을 사용하여 데이터베이스의 숫자 필드에서 필터링을 수행 할 수있게하려는 경우 그래서 나는이GET 요청 매개 변수를 정수로 변환하는 중 ...

code = request.GET.get('code') 
condition = {} 
if(code is not None and int(code) > 0): 
    condition['code'] = int(code) 

Somemodel.objects.filter(**condition) 

같은 뭔가를하지만 내가 코드를 내가이 오류가 그렇지 수있는 경우에만 작동

invalid literal for int() with base 10: '' 

그래서이 문제를 처리 할 수있는 파이썬 방법은 무엇입니까? try/except 블록을 사용해야합니까? 다른 필터를 추가 할 수도 있다고 생각하면 if 문을 사용해야합니다.

+0

http://stackoverflow.com/q/1265665/1005215 –

+1

여기서'request.GET'을 처리하기 위해 장고의 내장 폼/유효성 검사를 사용하지 않는 이유는 무엇입니까? –

답변

1

isnumericcode 경우 확인할 수 있습니다 희망입니다 int을 주조에code 또한 긍정적인지 확인 될 수있다 (정수로 변환 할 때) 따라서 int(code) > 0 교체 :

if code is not None and code.isnumeric(): 
    condition['code'] = int(code) 
+1

isnumeric()은 유니 코드 문자열을 필요로합니까? AttributeError는 "22"이지만 U는 "22"로 잘 작동합니다. –

+0

감사합니다. 나는 그것을 시도했다 2.x –

+0

@SunilLulla 그 파이썬 3.x 태그로,이 모든 문자열 (기본적으로 유니 코드)에 대해 작동합니다 가정합니다. 파이썬 2에서는'isdigit'을 사용할 수 있습니다. 파이썬 2.x에서 –

0

int()는 숫자 값을 예상하기 때문에이 오류가 발생하는 이유는 양식 문자열에있을 수 있지만 다음과 같은 숫자 여야합니다. "22", "33"등이 유효합니다.

하지만 귀하의 경우에는 비어있는 것을 전달하므로 오류가 발생합니다. 당신이 원하는 출력 사용 유형()을 달성 할 수있다, 그것은

의 유형을 확인에 도움이 그래서 수정 된 코드는

code = request.GET.get('code') 
    condition = {} 
    if(code is not None and type(code) == int): 
      condition['code'] = int(code) 

    Somemodel.objects.filter(**condition) 

이 도움이 :)

+0

'type (code)'을 제외하고 그 단계에서'int'는 결코 타입이 아닐 것입니다 ... 항상 비어 있거나 그렇지 않으면 유효 할 수있는 문자열 일 것입니다 ... –

+0

당신은 숫자 입력란 등의 유효성 확인과 같은 위의 수표 이후의 다른 수표와 귀하의 조건을 자세히 설명해 주시겠습니까? –

1

하나 이상의 IntegerField가있는 장고 (Django) 양식을 사용해야합니다. 그들은 당신을 위해이 변환을 수행합니다. 그러면 cleaned_data에서 결과를 얻을 수 있습니다.

관련 문제