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

Répondre à