2

저는 장고를 처음 사용하고 있으며 최근에 사용자가 숫자를 기반으로 레코드를 찾을 수있는 시스템을 만들었습니다. 단순한 검색 일뿐입니다. 시스템 번호는 앞에 오는 0을 가지고 시스템이 0이 있거나없는 숫자를 인식하기를 원합니다. 나는이 시스템을 구현 할 수 있었다 나는 사용자가 다음 코드로 지정하는 숫자로 변환하고 있습니다 : 위의사용자가 정수를 입력했는지 확인

def get_queryset(self): 
    queryset = super(SearchResultsView, self).get_queryset() 
    search_query = int(self.request.GET.get("q")) 
    if search_query: 
     queryset = Book.objects.filter(Q(request_number__icontains=search_query)).distinct() 

코드는 한 사용자가 번호를 입력으로, 잘 작동합니다. 그들이 typo 문자를 포함하는 경우, 나는 Base10에 대한 문자가 유효하지 않습니다. 나는 그 오류를 이해한다. 편지는 INT가 아니다. 나는 대부분의 오후를이 오류를 방지하는 방법을 찾는 데 보냈고 내가 찾고있는 것을 찾을 수 없다. 나는 다음과 같이하려고 노력했다.

if search_query: 
     try: 
      queryset = Book.objects.filter(Q(request_number__icontains=search_query)).distinct() 
     except ValueError: 
      q = 0000000 
    return queryset 

그러나 글자는 여전히 해석되며,이어서 Base10 오류에 대한 유효하지 않은 리터럴을 수신한다. 숫자를 기반으로 한 내 쿼리에서 글자가 문제를 일으키는 것을 방지하려면 어떻게해야합니까?

검색 쿼리에서 INT 로의 변환을 제거하면 문자가 더 이상 문제를 일으키지 않으며 시스템에서 아무 것도 반환하지 않는다는 것을 알아 냈습니다. 그래서 예상 한대로 처리 할 수 ​​있습니다. 그냥 시스템이 둘 다 할 수있는 방법을 궁금해, 편지를 받아 들일뿐만 아니라 잘못된 리터럴 오류를 방지하고 시스템이 입력을 정수로 변환하도록 허용합니다. 도움이되는 제안에 미리 감사드립니다. 다니엘 Roseman 제안으로

, 나는 다음과 같은 양식을 사용하려고하지만 ... 하나

클래스 RequestNumberSearch (forms.Form를) 오류를 잡으려고하지 않는 것 :

q = forms.IntegerField(required=True) 

def __init__(self, user, *args, **kwargs): 
    super(RequestNumberSearch, self).__init__(*args, **kwargs) 
    self.fields['q'].widget.attrs['class'] = 'name2' 

def clean_q(self): 
    data = self.cleaned_data['q'] 
    if q != int: 
     raise forms.ValidationError("Please enter valid numbers!") 

    return data 
+1

이것은 정확히 형식입니다. –

+0

@ 대니얼 로즈 맨 .. 그래, 나는이 목적을 위해 양식을 활용하려고 노력했다 ... 나는 양식을 추가했지만 여전히 작동하지 않는 것 같다. ... –

+0

그러나 값이 유효한지 확인하려면 정수, 왜 CharField보다는 IntegerField를 사용합니까? –

답변

1

을 확인하기 전에 쿼리를 int로 변환하려고합니다.

search_query = self.request.GET.get("q") 

if search_query.isdigit(): # check is digit 
    queryset = Book.objects.filter(Q(request_number__icontains=search_query)).distinct() 
    return queryset 
elif ... : # another check 
... 
else: 
    return 'query is erroneous' 
관련 문제