Les ModelForm requièrent un paramètre `instance` pour des modifications d'une instance donnée… Voir ma précédente réponse…
2016-05-18 15:14 GMT+02:00 Encolpe DEGOUTE <[email protected]>: > > Après une bonne nuit de sommeil mon code fonctionne en l'état… > En revanche il me crée un nouvel User avant de passer dans la méthode save > ce qui me donne une erreur de duplicate : > > ERREUR: la valeur d'une clé dupliquée rompt la contrainte unique « > auth_user_username_key » > DETAIL: La clé « (username)=(edegoute3) » existe déjà. > > > Si je rajoute pas la méthode form_valid dans la vue, le code ne passe > jamais dans le save. > À nouveau je ne suis pas très loin, mais je butte sur cette erreur. > > > class UserProfileChangeUsernameMailForm(forms.ModelForm, UserForm): > class Meta: > model = User > fields = ['username', 'email'] > > def __init__(self, user=None, *args, **kwargs): > self.user = user > super(UserProfileChangeUsernameMailForm, self).__init__(*args, > **kwargs) > self.fields['username'].initial = self.user.username > self.fields['email'].initial = self.user.email > > def save(self, *args, **kw): > super(UserProfileChangeUsernameMailForm, self).save(*args, **kw) > self.user.username = self.cleaned_data.get('username') > self.user.email = self.cleaned_data.get('email') > self.user.save() > > > class UserProfileChangeUsernameMailView(LoginRequiredMixin, > AjaxCapableProcessFormViewMixin, FormView): > template_name = "personalshowper/userprofile/username_mail_change.html" > form_class = UserProfileChangeUsernameMailForm > success_url = reverse_lazy("userprofile_username_mail") > > def get_form_class(self): > return get_form_class(app_settings.FORMS, > 'userprofile_username_mail', > self.form_class) > > def get_form_kwargs(self): > kwargs = super(UserProfileChangeUsernameMailView, > self).get_form_kwargs() > kwargs["user"] = self.request.user > return kwargs > > def get_context_data(self, **kwargs): > ret = super(UserProfileChangeUsernameMailView, > self).get_context_data(**kwargs) > return ret > > def form_valid(self, form): > form.save() > return super(UserProfileChangeUsernameMailView, > self).form_valid(form) > > > > ------------------------------ > *De: *"Rémy Hubscher" <[email protected]> > *À: *[email protected] > *Envoyé: *Mercredi 18 Mai 2016 09:44:48 > *Objet: *Re: [afpy/django] Problème de valeur initiale des champs pour un > ModelForm > > > Peut-être que ceci peut t'aider: > http://stackoverflow.com/questions/1727564/how-to-create-a-userprofile-form-in-django-with-first-name-last-name-modificati/1727685#1727685 > > Le 18/05/2016 08:55, Christophe Narbonne a écrit : > > Tu veux peut-être associer ton ModelForm à ton modèle? > > class UserProfileChangeUsernameMailForm(forms.ModelForm): > class Meta: > model = User > fields = ['username', 'email'] > > def __init__(self, *args, **kwargs): > self.user = kwargs.pop('user', None) > kwargs['instance'] = self.user > super(forms.ModelForm, self).__init__(*args, **kwargs) > …… > > 2016-05-17 23:48 GMT+02:00 Encolpe DEGOUTE <[email protected]>: > >> Bonjour, >> >> >> >> J'essaie de remplir mes champs avec les valeurs de l'utilisateur >> authentifié.. >> >> Lors du passage dans __init__ les champs sont remplis avec les valeurs >> attendues. En revanche à l'affichage les champs restent vides. >> >> Je tourne autour du pot depuis le début de l'après-midi et je ne vois >> plus comment faire. >> >> >> >> Le code form/view est le suivant. Le modèle User est le standard de >> Django avec une couche Allauth. >> >> >> >> from django.contrib.auth.models import User >> >> class UserProfileChangeUsernameMailForm(forms.ModelForm): >> class Meta: >> model = User >> fields = ['username', 'email'] >> >> def __init__(self, *args, **kwargs): >> self.user = kwargs.pop('user') >> super(forms.ModelForm, self).__init__(*args, **kwargs) >> self.fields['username'].initial = self.user.username >> self.fields['email'].initial = self.user.email >> >> >> class UserProfileChangeUsernameMailView(LoginRequiredMixin, >> AjaxCapableProcessFormViewMixin, FormView): >> template_name = >> "personalshowper/userprofile/username_mail_change.html" >> form_class = UserProfileChangeUsernameMailForm >> success_url = reverse_lazy("userprofile_change_username_mail") >> >> def get_form_class(self): >> return get_form_class(app_settings.FORMS, >> 'change_username_mail', >> self.form_class) >> >> def get_form_kwargs(self): >> kwargs = super(UserProfileChangeUsernameMailView, >> self).get_form_kwargs() >> kwargs["user"] = self.request.user >> return kwargs >> >> def get_context_data(self, **kwargs): >> ret = super(UserProfileChangeUsernameMailView, >> self).get_context_data(**kwargs) >> return ret >> >> >> class UserProfileChangeUsernameMailView(LoginRequiredMixin, >> AjaxCapableProcessFormViewMixin, FormView): >> template_name = >> "personalshowper/userprofile/username_mail_change.html" >> form_class = UserProfileChangeUsernameMailForm >> success_url = reverse_lazy("userprofile_change_username_mail") >> >> def get_form_kwargs(self): >> kwargs = super(UserProfileChangeUsernameMailView, >> self).get_form_kwargs() >> kwargs["user"] = self.request.user >> return kwargs >> >> def get_context_data(self, **kwargs): >> ret = super(UserProfileChangeUsernameMailView, >> self).get_context_data(**kwargs) >> return ret >> >> >> Je suis preneur de toute aide. >> >> Cordialement >> >> -- >> >> Encolpe Degoute >> >> <http://encolpe.wordpress.com>http://encolpe.wordpress.com >> >> <http://encolpe.degoute.free.fr>http://encolpe.degoute.free.fr >> >> Logiciels libres, hockey sur glace et autres activités cérébrales >> >> >> >> _______________________________________________ >> django mailing list >> [email protected] >> http://lists.afpy.org/mailman/listinfo/django >> > > > > -- > Best regards, > Christophe Narbonne > > http://links.christophe31.net/ > > > _______________________________________________ > django mailing > [email protected]http://lists.afpy.org/mailman/listinfo/django > > > > _______________________________________________ > django mailing list > [email protected] > http://lists.afpy.org/mailman/listinfo/django > > > _______________________________________________ > django mailing list > [email protected] > http://lists.afpy.org/mailman/listinfo/django > -- Best regards, Christophe Narbonne http://links.christophe31.net/
_______________________________________________ django mailing list [email protected] http://lists.afpy.org/mailman/listinfo/django
