2010-10-30 7 views
6

Jak utworzyć filtr w Django Admin, aby wyświetlać tylko rekordy, w których wartość całkowita mieści się między dwiema wartościami? Na przykład, jeśli mam model Person, który ma atrybut wieku i chcę wyświetlać tylko rekordy Person, gdzie wiek wynosi od 45 do 65.Administrator Django: Jak filtrować na polu liczby całkowitej dla określonego zakresu wartości?

+0

lepiej pasuje do http://webmasters.stackexchange.com/questions – Svisstack

+3

@Svisstack Nie sądzę; to jest pytanie programistyczne. – FunLovinCoder

+0

Tak, wiem, ale lepiej jodła dla webmasterów – Svisstack

Odpowiedz

0

Po prostu chcę przefiltrowaną wersję widoku listy, że dostęp za pośrednictwem łącza (powiedzmy w widoku listy), na przykład, aby wyświetlić tylko te związane z elementów modelu, można zrobić coś takiego:

def admin_view_receipts(self, object): 
    url = urlresolvers.reverse('admin:invoice_%s_changelist'%'receipt') 
    params = urllib.urlencode({'invoice__id__exact': object.id}) 
    return '<a href="%s?%s">Receipts</a>' % (url, params) 
admin_view_receipts.allow_tags = True 
admin_view_receipts.short_description = 'Receipts' 

to zabierze Cię do widoku listy dla „reciepts” ale tylko te, które są powiązane z wybraną fakturą.

Jeśli chcesz filtr, który wyświetla na pasku bocznym, można try this snippet lub this

1

można filtrować niektóre pola, co w ten sposób za pomocą funkcji ... queryset() używałem SimpleListFilter

def queryset(self, request, queryset): 
     filt_age = request.GET.get('parameter_name') 
     return queryset.filter(
        age__range=self.age_dict[filt_age] 
       ) 

I utworzyć dict w lookups() i odesłać go w zależności od wieku

def lookups(self, request, model_admin): 
    return [ 
     (1, '5-21'), 
     (2, '22-35'), 
     (3, '35-60') 
    ]