2014-12-19 2 views
3

get_search_results 메서드를 무시한 후에 list_filter이 작동하지 않지만 검색 필드가 예상대로 작동합니다. 관리자의 목록 필터 및 검색 결과

class NaruceniProduktiAdmin(admin.ModelAdmin): 
    search_fields = ('broj_narudbe',) 
    list_filter = ('date', 'status',) 
    list_display = (
     'naziv_produkta', 'datum', 'narudba_broj', 'boja', 'velicina', 'cijena', 'kolicina', 
     'ukupna_cijena','korisnik_link','status','source_link', 
    ) 
    actions = [dostupan, nedostupan, email_dostupan, placen, posalji_racun, poslan, isporucen, storniran, posalji_storno, ] 

    def get_search_results(self, request, queryset, search_term): 
     queryset, use_distinct = super(NaruceniProduktiAdmin, self).get_search_results(request, queryset, search_term) 

     try: 
      search_term_as_int = int(search_term) 
     except ValueError: 
      search_term_as_int=search_term.strip() 
      queryset |= self.model.objects.filter(korisnik__ime__icontains=search_term_as_int) 

      if not queryset: 
       queryset |= self.model.objects.filter(korisnik__prezime__icontains=search_term_as_int) 
     else: 
      queryset = self.model.objects.filter(broj_narudbe=search_term_as_int) 

     return queryset, use_distinct 

내가 get_search_results을 제거하면

다음 list_filter 작품은 예상대로. 검색 필드를 예상대로 작동하게하고 싶기 때문에 그대로두기를 원하지만 목록 필터링이 정상적으로 작동하도록하고 싶습니다.

두 가지 방법을 함께 사용할 수 있습니까? 그리고 하나가 다른 것에 영향을 미치는 이유가 있습니까?

enter image description here

+0

"list_filter는 작동하지 않는다"는 것은 무엇을 의미합니까? 무슨 일이야? – Anentropic

+0

Django 관리자의 오른쪽을 클릭하여 날짜별로 필터링합니다. 예를 들면 오늘, 지난 7 일간 아무 일도 일어나지 않습니다. – blaz1988

+0

누구입니까? 주요 질문은 왜 get_search_results가 list_filter의 작동에 영향을 미치는지입니다. 장고는 search_fields 및 list_filter에 대해 동일한 메소드 get_search_results를 사용 했습니까? – blaz1988

답변

2

변경 목록보기 제 다음은 get_search_results 함수에 파라미터로서 여과 검색어 세트를 제공 필터링한다. 올바르게 작동하게하려면 self.model.objects 대신 queryset 인수를 사용해야합니다.

def get_search_results(self, request, queryset, search_term): 
    new_queryset, use_distinct = super(NaruceniProduktiAdmin, self).get_search_results(request, queryset, search_term) 

    try: 
     search_term_as_int = int(search_term) 
    except ValueError: 
     search_term_as_int=search_term.strip() 
     new_queryset |= queryset.filter(korisnik__ime__icontains=search_term_as_int) 

     if not new_queryset: 
      new_queryset |= queryset.filter(korisnik__prezime__icontains=search_term_as_int) 
    else: 
     new_queryset = queryset.filter(broj_narudbe=search_term_as_int) 

    return new_queryset, use_distinct