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" <[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] > :
<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
--
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
--
Best regards,
Christophe Narbonne
http://links.christophe31.net/
_______________________________________________
django mailing list [email protected]
http://lists.afpy.org/mailman/listinfo/django
</blockquote>
_______________________________________________
django mailing list
[email protected]
http://lists.afpy.org/mailman/listinfo/django
_______________________________________________
django mailing list
[email protected]
http://lists.afpy.org/mailman/listinfo/django