Cette phrase m'a plus aidé que l'exemple de code. Merci. Le mercredi 18 mai 2016, 22:29:35 CEST Christophe Narbonne a écrit : > 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 > >>tres activités cérébrales > >>
-- Encolpe Degoute http://encolpe.wordpress.com 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
