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

Répondre à