2014-11-27 4 views
0

장고 응용 프로그램을 만들고 특정 모델의 장고 웹 관리 인터페이스에 검색 상자를 추가하여 사용자가 더 많은 필드를 동시에 검색 할 수 있도록하려고합니다. 예를 들어 사용자는 하나의 검색 창에 도시 이름을 입력하고 다른 검색 창에는 거리 이름을 입력 할 수 있으며 '검색'버튼을 클릭하면 해당 도시와 거리가있는 모든 모델 인스턴스가 브라우저에 표시됩니다. 기본 관리 웹 인터페이스에는 검색 상자가 하나만 있습니다. change_list.html 파일에 3 개의 검색 상자를 추가했습니다. 브라우저의 검색 창에 데이터를 입력하고 '검색'을 누르면 적절한 URL이 검색됩니다 (검색을 수행 할 세 입력 매개 변수가 들어있는 쿼리 문자열 포함).). 그런 다음 models.AdminModel calss 확장 내 클래스에서 재정의 된 queryset 메서드에서 해당 입력 된 매개 변수를 캡처하고 쿼리 집합 필터링을 수행하고 마지막으로 필터링 된 쿼리 집합을 반환합니다. 이제 문제는 검색 프로세스가 완료된 후 필터링 된 쿼리 집합이 웹 페이지 (내 모델의 웹 인터페이스)에 단순히 표시되지 않는다는 것입니다. 일치하는 항목이 없다는 의미입니다. 하지만 필자는 필터링 된 쿼리 집합에 queryset 메서드의 return 명령이 실행되기 직전에 명령 줄에서 데이터를 인쇄한다는 사실을 확실히 알고 올바른 데이터를 인쇄합니다. 웹 인터페이스에 표시Queryset이 ​​장고 관리 인터페이스에 표시되지 않음

def queryset(self, request): 

    qs = super(UkopcanjeAdmin, self).queryset(request) 
    if "mjesto" in request.GET: 
     lokacija = request.GET.get('mjesto',None) 
     if lokacija: 
      qs = qs.filter(mjesto__icontains=lokacija) 

    if "ulica" in request.GET: 
     ulica = request.GET.get('ulica',None) 
     if ulica: 
      qs = qs.filter(ulica__icontains=ulica) 

    if "naziv" in request.GET: 
     naziv = request.GET.get('naziv',None) 
     if naziv: 
      qs = qs.filter(naziv__icontains=naziv) 

    print qs #this prints correct filtered data 
    return qs 

왜 필터링되지 않은 쿼리 세트 : 여기

queryset 방법?

편집 : 내 친구 덕분에 마침내 문제를 해결할 수있었습니다. 그리고 솔루션은 매우 간단합니다. get_search_results 메서드로 queryset 메서드의 전체 코드를 이동하고 필터링 된 쿼리 세트를 반환하면 false 부울 매개 변수가 반환됩니다 (get_search_results 메서드는 두 개의 매개 변수를 반환하기 때문에). 따라서 Django에서 검색 프로세스를 사용자 정의하려면 get_search_results 메소드를 사용해야합니다. 여기서 쿼리 문자열 argumnets에 액세스하고 원하는 방식으로 데이터를 검색 할 수 있습니다.

답변

1

나는 get_queryset이어야한다고 생각하지만 queryset 방법이 아닐 것이라고 생각합니다.

def get_queryset(request): 
    #your code here 
    queryset = super(UkopcanjeAdmin, self).get_queryset(request) 
    if 'miesto' in request.GET: 
     print 'Yes' 
     return queryset 
    else: 
     print 'No' 

Here은 장고 문서에서 간략한 설명입니다.

+0

하지만 get_queryset 메서드에서 URL 매개 변수에 액세스 할 수 있습니까? – programmer

+0

@programmer 내 대답을 업데이트했습니다. 인수로서 '요청'을 취하면 GET과 거기에서 필요한 모든 것을 액세스 할 수 있습니다. – wolendranh

+0

'queryset'을'get_queryset'으로 변경했습니다,하지만 불행히도 행동은 같습니다. 필터링 된 쿼리 세트에는 정확한 데이터가 포함되어 있지만 브라우저에는 표시되지 않습니다 ... URL 쿼리 문자열에 하나의 매개 변수가있는 경우에만 유용합니다 (예 : localhost : 8000/admin/mainApp/some_model /?). location = someCity,하지만 둘 이상의 매개 변수가있는 경우 필터링 된 쿼리 집합이 표시되지 않습니다. – programmer

관련 문제