Champ ChoiceField dynamique

23 Nov

Dans certains cas en utilisant le framework Django nous avons besoin d'ajouter un champ ChoiceField dynamique et non pas juste une liste de valeurs statiques contenues dans tuple ou liste, mais aussi que la liste des valeurs de la liste soit liée à un autre modèle, Je vais donc vous montrer comment réaliser ça rapidement avec le framework

Nous allons prendre comme exemple un modèle Pizza et un autre Ingredient qui pour le model Pizza sera lié aussi à modèle User permettant aux utilisateurs de créer leur propre pizza:

class Pizza(models.Model):
  user = models.ForeignKey(User)
  nom=models.Charfield(50)
  ingredient=models.ManyToManyField(Ingredient)

class Ingredient(models.Model):
    nom=models:Charfield(50)

Maintenant nous allons overrider la méthode __init__ de notre PizzaForm pour ajouter la liste d'ingrédients du modèle et on fait passer le modèle User à la méthode __init__ pour récupérer l'utilisateur spécifique, donc ne pas oublier de faire passer l'utilisateur:  form = IngredientForm(user) :

class IngredientForm(forms.modelForn):
    def __init__(self, user, *args, **kwargs):
        super(PizzaForm, self).__init__(*args, **kwargs)
        self.field[''ingredient] = forms.ModelChoiceField(queryset = Ingredient.objects.filter(user=user))
    Meta:
        model: Ingredient

Voilà il suffit juste d'ajouter au champ ingrédient la liste via un queryset queryset=Ingredient.objects.filter(user=user), ce qui permettra d'optenir les ingredients spécifiques pour chaque pizza mais filtrés par utilisateur dans le choiceField de votre formulaire.

Publié le: Mercredi 23 novembre 2016
blog comments powered by Disqus
Monter

© Circonflex-studio - Tous droits réservés - Mentions legales
Développeur web indépendant / Webdesigner / Intégrateur
Nice - Cannes - Monaco - Antibes - côte d'azur | site valide HTML 5

Ce site à été développé en Python avec le framework Django

"http://www.cssawards.net/nominee/circonflex-studio/"