J'utilise le très cool django-filtre (via: http://github.com/alex / django-filtre ) et soit peut sembler sembler envelopper ma tête autour des docs, ou peut-être juste juste besoin d'un peu de boost.
Lorsque je montre le formulaire de filtrage sur une page de liste d'objets, pour un champ FK i
Obtenez la liste déroulante qui comprend un "-----" qui entraîne une
"Tout" filtre de type. Mais j'ai des choix réglés sur un champ sur ce
Modèle, et j'aimerais avoir la même option de type "Toute" ".
Voici une partie d'exemple pertinente de modèles.pyclusxxledleight/pre> "Quand Quand j'affiche le formulaire de filtrage, ' Comment puis-je ajouter une option "n'importe quelle" aux champs en fonction de _choices? p> p> assigné_to' code> obtient une option "n'importe quelle", comme
ainsi que la liste des utilisateurs disponibles. Le champ 'Statut' code> est cependant
Limitée uniquement aux options énumérées dans les "chiens" réels. p>
6 Réponses :
Comme mentionné dans les documents "d'utilisation" courts mais doux,
Les filtres prennent également des arguments de mots clés arbitraires qui sont transmis sur le
django.forms.field code> constructeur. p> BlockQuote>Cela n'a pas beaucoup de sens jusqu'à ce que je n'aime pas beaucoup plus loin. Dans le
./ Django-filtre / DOCS / REF / CODE> répertoire, il existefilters.txt code> qui décrit les champs de filtrage et quels champs modèles ils interagissent par défaut. (Je pense avoir la langue ici, sinon, corrigez-moi). P>Ainsi, nous pouvons voir que
ChoiceFilter code> est utilisé pour n'importe quel champ "avec choix". P>frapper la documentation de Django, ce qui est important ici, voici des champs de formulaire et comment ils interagissent avec des modèles. (En utilisant des formulaires Django). Nous trouvons donc Choicefield ( http://docs.djangoproject.com/fr / dev / réf / formulaires / champs / # ChoixField ) qui dit P>
prend un argument supplémentaire requis: Choixfield.choices Un iérien (par exemple, une liste ou un tuple) de 2 tuples à utiliser comme choix pour ce champ. P> blockQuote>
Pour que vous puissiez transmettre une liste, pas seulement les choix de tupes d'origine définis. p>
Donc, cela pourrait ne pas être pythonique ni sec, mais voici comment j'ai changé le modèle en question: p>
xxx pré> et au-dessus de ce que mes chèvres ont été définis , J'ai défini ce nouveau (mentionné ci-dessus) et je suis sûr d'apporter les choix originaux à la fin: p>
xxx pré> J'utilise la liste () ici parce que les choix originaux étaient Configurez-vous dans un tuple, je veux donc transformer cela dans une liste. De plus, si vous obtenez une erreur de type type, assurez-vous de ne pas tenter d'affecter la «valeur de retour» du
.extend () code>, car il n'y en a pas. J'ai trébuché sur cela, car j'ai oublié que c'était une méthode d'une liste code> code>, et non une fonction qui a renvoyé une nouvelle liste. P>Si vous connaissez une manière plus facile, plus sèche ou "pythonique" de faire cela, merci de me le faire savoir! p> p>
sèche serait d'utiliser l'argument de "choix" déjà défini pour ChoiceFilter.
Pour que vous puissiez simplement étendre votre filtre_choices à votre ticket_status_choices plus une option "Toute" avec la chaîne vide: P> < Pré> xxx pré>
et votre TicketFilter serait: p>
Basé sur le travail de lâche anonyme, j'ai procédé à ce qui suit:
J'ai combiné toutes les méthodes ci-dessus depuis que je n'aime pas spécifier tous les champs qui doivent être mis à jour et terminés avec quelque chose comme ceci: Quel travail. p> p>
Même plus court est d'utiliser l'étiquette vide:
Vous pouvez simplement utiliser null_label code> et null_value code>, par exemple.