2010-11-05 14 views
0

Je souhaite ajouter les champs first_name, last_name et email à la page d'administration UserProfile. Ainsi, vous pouvez modifier tous les détails de l'utilisateur à partir de l'administrateur UserProfile au lieu d'avoir à aller sur une page différente pour modifier les e-mails et d'autres champs.Branchement des valeurs dans les champs ModelForm à __init__ temps

C'est ce que mon formulaire personnalisé ressemble à:

class CustomProfileForm(forms.ModelForm): 
    first_name = forms.CharField(max_length=30) 
    last_name = forms.CharField(max_length=30) 
    email = forms.EmailField() 

    class Meta: 
     model = UserProfile 

    def __init__(self, *a, **k): 
     super(CustomProfileForm, self).__init__(*a, **k) 
     self.user_instance = None 
     if self.instance: 
      self.user_instance = self.instance.user 

    def clean_first_name(self): 
     self.user_instance.first_name = self.cleaned_data['first_name'] 

    def clean_first_name(self): 
     self.user_instance.last_name = self.cleaned_data['laset_name'] 

    def clean(self): 
     self.user_instance.save() 
     return self.cleaned_data 

class UserProfileAdmin(admin.ModelAdmin): 
    form = CustomProfileForm 

Je ne sais pas quoi faire pour compléter cela. Je dois donner les détails user_instance à la classe de formulaire appropriée.

Répondre

2

Pour définir les valeurs initiales dans la méthode init, vous pouvez utiliser le dictionnaire de champs.

def __init__(self, *a, **k): 
    # <snip> 
    self.fields[ 'email' ].initial = self.user_instance.email 
    # ... and any others 
+0

Ce que je veux dire, c'est que l'adresse e-mail, le nom et le prénom de l'utilisateur soient ajoutés dans les zones de texte lorsque le formulaire est affiché. Actuellement, seules les informations de l'objet UserProfile sont ajoutées aux formulaires liés. Je dois ajouter des données de l'instance 'Userprofile.user'. – priestc

+0

Oups, je n'ai pas combiné votre titre avec le corps de votre question. Édité. –