web-dev-qa-db-fra.com

Django: Comment préremplir FormView avec des données dynamiques (non-modèle)?

J'ai une vue FormView, avec un contexte GET supplémentaire fourni à l'aide de get_context_data ():

class SignUpView(FormView):
    template_name = 'pages_fixed/accounts/signup.html'
    form_class = SignUpForm

    def get_context_data(self, **kwargs):
        context = super(SignUpView, self).get_context_data(**kwargs)
        context = {
            'plans':    common.plans,
            'pricing':  common.pricing,
        }
        return context

Cela fonctionne bien. Cependant, j'ai également quelques valeurs en session (pas à partir d'un modèle lié) que je voudrais pré-remplir dans le formulaire. Ceux-ci varient en fonction des actions de l'utilisateur sur les pages précédentes. Je sais (de mon autre post ) que je peux passer le formulaire dans le contexte (avec initial=) mais est-il possible dans une situation FormView ci-dessus?

29
pete

Vous pouvez remplacer la méthode "get_initial" de la classe FormView. Voir ici pour plus d'informations,

par exemple.

def get_initial(self):
    """
    Returns the initial data to use for forms on this view.
    """
    initial = super(SignUpView, self).get_initial()

    initial['my_form_field1'] = self.request.something

    return initial

'get_initial' devrait retourner un dictionnaire où les clés sont les noms des champs du formulaire et les valeurs sont les valeurs initiales à utiliser lors de la présentation du formulaire à l'utilisateur.

61
user772401