12
votes

Utilisation de 'Django-filtre' avec des choix sur le terrain - besoin d'option "n'importe quelle"

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, ' assigné_to' obtient une option "n'importe quelle", comme ainsi que la liste des utilisateurs disponibles. Le champ 'Statut' est cependant Limitée uniquement aux options énumérées dans les "chiens" réels.

Comment puis-je ajouter une option "n'importe quelle" aux champs en fonction de _choices?


0 commentaires

6 Réponses :


8
votes

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 constructeur.

Cela n'a pas beaucoup de sens jusqu'à ce que je n'aime pas beaucoup plus loin. Dans le ./ Django-filtre / DOCS / REF / répertoire, il existe filters.txt 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).

Ainsi, nous pouvons voir que ChoiceFilter est utilisé pour n'importe quel champ "avec choix".

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

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.

Pour que vous puissiez transmettre une liste, pas seulement les choix de tupes d'origine définis.

Donc, cela pourrait ne pas être pythonique ni sec, mais voici comment j'ai changé le modèle en question: xxx

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: xxx

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 () , 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 , et non une fonction qui a renvoyé une nouvelle liste.

Si vous connaissez une manière plus facile, plus sèche ou "pythonique" de faire cela, merci de me le faire savoir!


0 commentaires

10
votes

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: < Pré> xxx

et votre TicketFilter serait: xxx


0 commentaires

3
votes

Basé sur le travail de lâche anonyme, j'ai procédé à ce qui suit: xxx


0 commentaires

1
votes

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: xxx

Quel travail.


0 commentaires

6
votes

Même plus court est d'utiliser l'étiquette vide: xxx


0 commentaires

0
votes

Vous pouvez simplement utiliser null_label et null_value , par exemple. xxx


0 commentaires