Django-fr

Forum

  • Accueil
  • » Django-fr
  • » Problème de valeur initiale des cham ps pour un ModelForm

#1 17-05-2016 22:48:41

Encolpe Degoute
Membre
Inscription : 21-07-2016
Messages : 5

Problème de valeur initiale des cham ps pour un ModelForm

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:
'username', 'email']
def __init__(self, *args, **kwargs):
'user')
super(forms.ModelForm, self).__init__(*args, **kwargs)
'username'].initial = self.user.username
'email'].initial = self.user.email

class UserProfileChangeUsernameMailView(LoginRequiredMixin, AjaxCapableProcessFormViewMixin, FormView):
"personalshowper/userprofile/username_mail_change.html"
"userprofile_change_username_mail")
def get_form_class(self):
return get_form_class(app_settings.FORMS,
'change_username_mail',
def get_form_kwargs(self):
"user"] = self.request.user
return kwargs
def get_context_data(self, **kwargs):
return ret

class UserProfileChangeUsernameMailView(LoginRequiredMixin, AjaxCapableProcessFormViewMixin, FormView):
"personalshowper/userprofile/username_mail_change.html"
"userprofile_change_username_mail")
def get_form_kwargs(self):
"user"] = self.request.user
return kwargs
def get_context_data(self, **kwargs):
return ret

Je suis preneur de toute aide.

Cordialement

Hors ligne

#2 18-05-2016 07:55:59

Christophe, Jean-Charles Narbonne
Membre
Inscription : 23-06-2011
Messages : 30

Re : Problème de valeur initiale des cham ps pour un ModelForm

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 <encolpe.degoute _AT_ free.fr>:

> 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.degoute.free.fr
>
> Logiciels libres, hockey sur glace et autres activités cérébrales
>
>
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>

Hors ligne

#3 18-05-2016 08:44:48

Rémy HUBSCHER
Membre
Inscription : 11-08-2010
Messages : 161

Re : Problème de valeur initiale des cham ps 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?
>
> classUserProfileChangeUsernameMailForm(forms.ModelForm):
>    classMeta:
>        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 <encolpe.degoute _AT_ free.fr
> <mailto:encolpe.degoute _AT_ free.fr>>:
>
>     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.
>
>     
>
>     fromdjango.contrib.auth.models importUser
>
>     classUserProfileChangeUsernameMailForm(forms.ModelForm):
>        classMeta:
>            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
>
>
>     classUserProfileChangeUsernameMailView(LoginRequiredMixin,
>     AjaxCapableProcessFormViewMixin, FormView):
>        template_name =
>     "personalshowper/userprofile/username_mail_change.html"
>        form_class = UserProfileChangeUsernameMailForm
>        success_url = reverse_lazy("userprofile_change_username_mail")
>
>        defget_form_class(self):
>            returnget_form_class(app_settings.FORMS,
>                                  'change_username_mail',
>                                  self.form_class)
>
>        defget_form_kwargs(self):
>            kwargs = super(UserProfileChangeUsernameMailView,
>     self).get_form_kwargs()
>            kwargs["user"] = self.request.user
>            returnkwargs
>
>        defget_context_data(self, **kwargs):
>            ret = super(UserProfileChangeUsernameMailView,
>     self).get_context_data(**kwargs)
>            returnret
>
>
>     classUserProfileChangeUsernameMailView(LoginRequiredMixin,
>     AjaxCapableProcessFormViewMixin, FormView):
>        template_name =
>     "personalshowper/userprofile/username_mail_change.html"
>        form_class = UserProfileChangeUsernameMailForm
>        success_url = reverse_lazy("userprofile_change_username_mail")
>
>        defget_form_kwargs(self):
>            kwargs = super(UserProfileChangeUsernameMailView,
>     self).get_form_kwargs()
>            kwargs["user"] = self.request.user
>            returnkwargs
>
>        defget_context_data(self, **kwargs):
>            ret = super(UserProfileChangeUsernameMailView,
>     self).get_context_data(**kwargs)
>            returnret
>
>
>     Je suis preneur de toute aide.
>
>     Cordialement
>
>     --
>
>     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
>     django _AT_ lists.afpy.org <mailto:django _AT_ lists.afpy.org>
>     http://lists.afpy.org/mailman/listinfo/django
>
>
>
>
> --
> Best regards,
> Christophe Narbonne
>
> http://links.christophe31.net/
>
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django

Hors ligne

#4 18-05-2016 14:14:23

Encolpe Degoute
Membre
Inscription : 21-07-2016
Messages : 5

Re : Problème de valeur initiale des cham ps pour un ModelForm

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)



----- Mail original -----

De: "Rémy Hubscher" <hubscher.remy _AT_ gmail.com>
À: django _AT_ lists.afpy.org
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 < encolpe.degoute _AT_ free.fr > :

<blockquote>


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

Hors ligne

#5 18-05-2016 21:29:35

Christophe, Jean-Charles Narbonne
Membre
Inscription : 23-06-2011
Messages : 30

Re : Problème de valeur initiale des cham ps pour un ModelForm

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 <encolpe.degoute _AT_ free.fr>:

>
> 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" <hubscher.remy _AT_ gmail.com>
> *À: *django _AT_ lists.afpy.org
> *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 <encolpe.degoute _AT_ free.fr>:
>
>> 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
>> django _AT_ lists.afpy.org
>> http://lists.afpy.org/mailman/listinfo/django
>>
>
>
>
> --
> Best regards,
> Christophe Narbonne
>
> http://links.christophe31.net/
>
>
> _______________________________________________
> django mailing listdjango _AT_ lists.afpy.orghttp://lists.afpy.org/mailman/listinfo/django
>
>
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>

Hors ligne

#6 19-05-2016 23:04:04

Encolpe Degoute
Membre
Inscription : 21-07-2016
Messages : 5

Re : Problème de valeur initiale des cham ps pour un ModelForm

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 <encolpe.degoute _AT_ free.fr>:
>
> >
> > 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" <hubscher.remy _AT_ gmail.com>
> > *À: *django _AT_ lists.afpy.org
> > *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 <encolpe.degoute _AT_ free.fr>:
> >
> >> 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
> >>

Hors ligne

  • Accueil
  • » Django-fr
  • » Problème de valeur initiale des cham ps pour un ModelForm

Pied de page des forums