2010-10-30 6 views
6

Comment créer un filtre dans Django Admin pour afficher uniquement les enregistrements où une valeur entière se trouve entre deux valeurs? Par exemple, si j'ai un modèle Person, qui a un attribut age, et que je veux seulement afficher les enregistrements Person où l'âge est entre 45 et 65 ans.Django Admin: Comment filtrer un champ entier pour une plage de valeurs spécifique

+0

mieux adapter à http://webmasters.stackexchange.com/questions – Svisstack

+3

@Svisstack Je ne pense pas; C'est une question de programmation. – FunLovinCoder

+0

oui je sais mais mieux sapin aux webmasters – Svisstack

Répondre

0

Je veux simplement une version filtrée de la vue de liste, que vous accès via un lien (par exemple dans la vue de la liste), par exemple pour afficher uniquement les éléments connexes d'un modèle, vous faites quelque chose comme ceci:

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' 

cela vous prendra à une vue de la liste pour « reciepts », mais seulement ceux liés à la facture sélectionnée.

Si vous voulez un filtre qui affiche dans la barre latérale, vous pourriez try this snippet ou this

1

Vous pouvez filtrer le champ ce que certains comme celui-ci en utilisant la fonction queryset() ... J'avais utilisé SimpleListFilter

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

Et créer dict dans lookups() et le retourner après l'âge

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