3 votes

django forms MultipleChoiceField revient à la valeur d'origine lors de la sauvegarde

J'ai écrit un champ personnalisé de type MultipleChoiceField. Tout fonctionne correctement, mais lorsque je soumets le formulaire, les valeurs sélectionnées reviennent aux choix initiaux, même si le formulaire se valide correctement.

mon code ressemble à ceci :

class ProgrammeField(forms.MultipleChoiceField):
    widget = widgets.SelectMultiple

class ProgrammeForm(forms.Form):
    programmes = ProgrammeField(required=False)

    def __init__(self, user, *args, **kwargs):
        self.fields['programmes'].choices = Mymodel.objects.all()
        self.fields['programmes'].initial = Mymodel.objects.filter(created=user)

view.py
if request.method == 'POST':
    form = ProgrammeForm(user=request.user, data=request.POST)
    if form.is_valid():
        form.save()
form = ProgrammeForm(request.user)

return render_to_response(form.html', {'form': form }) 

Je n'ai pas inclus tous les autres champs, etc., mais c'est essentiellement le code qui me pose problème. Je ne sais pas si vous avez une idée sur la façon d'afficher les nouvelles valeurs après que le formulaire a été soumis ou pourquoi il revient aux valeurs initiales.

Remerciements

3voto

Zach Points 4886

Vous renvoyez toujours une instance non liée du formulaire, essayez ceci :

view.py

if request.method == 'POST':
    form = ProgrammeForm(user=request.user, data=request.POST)
    if form.is_valid():
        form.save()
else: ##this is the changge
    form = ProgrammeForm(request.user)
return render_to_response('form.html', {'form': form })

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X