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
Répondre
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
Ce que vous cherchez est http://djangosnippets.org/snippets/587/ - l'extrait de code est un peu vieux, mais fonctionne très bien après un changement mineur supplémentaire.
I la version patchée téléchargé à https://gist.github.com/1009903
Basé sur another answer for a related question, j'ai appris qu'il ya un officially documented way à faire since version 1.4. Il inclut même un exemple de filtrage par date.
Néanmoins, l'extrait dans le sorin answer est également intéressant, car il ajoute simplement des paramètres de style django à l'URL, ce qui est une solution différente de l'exemple de documentation officielle.
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')
]
mieux adapter à http://webmasters.stackexchange.com/questions – Svisstack
@Svisstack Je ne pense pas; C'est une question de programmation. – FunLovinCoder
oui je sais mais mieux sapin aux webmasters – Svisstack