2014-12-19 2 views
3

После того как я переопределяю метод get_search_results, list_filter не работает, но поле поиска работает так, как я ожидаю.Список фильтров и результатов поиска в admin

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 admin для фильтрации по дате .. например, сегодня, за последние 7 дней ничего не происходит – blaz1988

+0

кто-нибудь? Главный вопрос: почему get_search_results влияет на работу list_filter. Использовал ли Django тот же метод get_search_results для search_fields и list_filter ..? – blaz1988

ответ

2

вид первый список изменений делает фильтрацию, то это дает отфильтрованный QuerySet в качестве параметра для вашей get_search_results функции. Чтобы он работал правильно, вы должны использовать аргумент queryset вместо self.model.objects.

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 
Смежные вопросы