장고 응용 프로그램을 만들고 특정 모델의 장고 웹 관리 인터페이스에 검색 상자를 추가하여 사용자가 더 많은 필드를 동시에 검색 할 수 있도록하려고합니다. 예를 들어 사용자는 하나의 검색 창에 도시 이름을 입력하고 다른 검색 창에는 거리 이름을 입력 할 수 있으며 '검색'버튼을 클릭하면 해당 도시와 거리가있는 모든 모델 인스턴스가 브라우저에 표시됩니다. 기본 관리 웹 인터페이스에는 검색 상자가 하나만 있습니다. 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에 액세스하고 원하는 방식으로 데이터를 검색 할 수 있습니다.
하지만 get_queryset 메서드에서 URL 매개 변수에 액세스 할 수 있습니까? – programmer
@programmer 내 대답을 업데이트했습니다. 인수로서 '요청'을 취하면 GET과 거기에서 필요한 모든 것을 액세스 할 수 있습니다. – wolendranh
'queryset'을'get_queryset'으로 변경했습니다,하지만 불행히도 행동은 같습니다. 필터링 된 쿼리 세트에는 정확한 데이터가 포함되어 있지만 브라우저에는 표시되지 않습니다 ... URL 쿼리 문자열에 하나의 매개 변수가있는 경우에만 유용합니다 (예 : localhost : 8000/admin/mainApp/some_model /?). location = someCity,하지만 둘 이상의 매개 변수가있는 경우 필터링 된 쿼리 집합이 표시되지 않습니다. – programmer