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?
Odpowiedz
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
Co szukasz jest http://djangosnippets.org/snippets/587/ - urywek jest trochę stary, ale działa dobrze po dodatkowym drobne zmiany.
upload wersji poprawionej w https://gist.github.com/1009903
podstawie another answer for a related question, dowiedziałem się, że istnieje officially documented way to zrobić since version 1.4. Zawiera nawet przykład filtrowania według daty.
Wciąż interesujący jest również fragment w sorin answer, ponieważ po prostu dodaje on do adresu URL parametry w stylu Django, co jest innym rozwiązaniem niż oficjalny przykład dokumentacji.
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')
]
lepiej pasuje do http://webmasters.stackexchange.com/questions – Svisstack
@Svisstack Nie sądzę; to jest pytanie programistyczne. – FunLovinCoder
Tak, wiem, ale lepiej jodła dla webmasterów – Svisstack