J'ai une question - Est-ce que l'interface Django Admin peut être personnalisée de manière à ce qu'elle ne présente que les options de filtrage qui se produisent dans le sous-ensemble de données qui correspondent aux filtres actuellement sélectionnés?django admin filters cascading
que j'ai un db de trois objets:
a.Foo = "One"
a.Bar = "Drink"
b.Foo = "One"
b.Bar = "Shot"
c.Foo = "Two"
c.Bar = "Shot"
Et une interface d'administration de django avec des filtres sur 'Foo' et 'Bar'. Je veux le comportement suivant:
- Si aucun filtre n'est choisi, 'Foo' liste "One", "Two"; 'Bar' affiche "Boire", "Shot"
- Si le filtre 'Foo' est réglé sur "One", 'Bar' affiche à la fois "Drink" et "Shot"
- Si le filtre 'Foo' est réglé sur " Deux "," Bar "liste uniquement" Shot "
- Si le filtre 'Bar' est réglé sur" Shot ", 'Foo' liste" One "et" Two "
- Si le filtre 'Bar' est réglé sur" Boire "," Foo "liste seulement" Un "
Cheers!
Pour être plus précis - après avoir lu quelques docs:
from django.contrib.admin import SimpleListFilter
class SomeFilter(SimpleListFilter):
title = "Foo"
parameter_name="Some"
def lookups(self, request, model_admin):
qs = model_admin.queryset(request)
print qs.query
return (('Foo', 'Bar'))
def queryset(self, request, queryset):
if (self.value()):
return queryset.filter(Some=self.value())
else:
return queryset
Ce qu'il fait, cependant, est obtient le « queryset », car il aurait été sans d'autres filtres. Comment puis-je le passer à travers d'autres filtres?
Je pourrais théoriquement analyser la requête et filtrer manuellement - mais il doit sûrement y avoir un moyen de canaliser tous les filtres.
Ajouté plus d'informations après quelques recherches - Je ne peux pas tout à fait comprendre comment obtenir le jeu de requête après que tous les autres filtres l'aient traversé. – qdot