2013-05-13 5 views
6

Gibt es eine Möglichkeit, den Standardwert für einen Filter in der Admin-Site festzulegen?Standardfilter in Admin-Site

Class Account(models.model): 
    isClosed = models.BooleanField(blank=True) 
    name = models.CharField(core=True, max_length=255,unique=True) 

In admin.py:

class Admin(admin.ModelAdmin): 
    list_filter = ['isClosed'] 

Auf der Admin-Seite, möchte ich der Standardwert für das Feld 'isClosed' 'Nein', nicht 'alle' zu sein.

Danke.

+0

Es gibt ein Problem mit der Antwort ist, wenn Sie alle drücken zeigen, wenn Sie nicht den Filter anwenden möchten, ist es nach wie vor den Filter – Blainn

Antwort

10

Sie müssten einen benutzerdefinierten Listenfilter erstellen, der von django.contrib.admin.filters.SimpleListFilter erbt und standardmäßig auf nicht geschlossene Konten filtert. Etwas in dieser Richtung sollte funktionieren:

from datetime import date 

from django.utils.translation import ugettext_lazy as _ 
from django.contrib.admin import SimpleListFilter 

class IsClosedFilter(SimpleListFilter): 
    title = _('Closed') 

    parameter_name = 'closed' 

    def lookups(self, request, model_admin): 
     return (
      (None, _('No')), 
      ('yes', _('Yes')), 
      ('all', _('All')), 
     ) 

    def choices(self, cl): 
     for lookup, title in self.lookup_choices: 
      yield { 
       'selected': self.value() == lookup, 
       'query_string': cl.get_query_string({ 
        self.parameter_name: lookup, 
       }, []), 
       'display': title, 
      } 

    def queryset(self, request, queryset): 
     if self.value() == 'closed': 
      return queryset.filter(isClosed=True)  
     elif self.value() == None: 
      return queryset.filter(isClosed=False) 


class Admin(admin.ModelAdmin): 
    list_filter = [isClosedFilter] 
+0

Große Lösung anzuwenden. Ich werde Addon hinzufügen. Wenn Sie dies mit anderen Listenfiltern verwenden, sollten Sie Folgendes tun: 'list_filter = ((isClosedFilter), ('date_created', admin.DateFieldListFilter),)' – raiderrobert

Verwandte Themen