2010-04-07 5 views
1

Je suis en train d'écrire un site web et je voudrais mettre en œuvre la gestion de profil. Chose de base serait d'éditer certains des détails de l'utilisateur par eux-mêmes, comme le prénom et le nom etc. Maintenant, j'ai dû étendre le modèle utilisateur pour ajouter mes propres trucs, et adresse e-mail.Django extension du modèle utilisateur et affichage du formulaire

J'ai des problèmes avec la forme d'affichage. L'exemple décrira mieux ce que je souhaite réaliser.

Ceci est le modèle d'utilisateur étendu de mine.

class UserExtended(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    kod_pocztowy = models.CharField(max_length=6,blank=True) 
    email = models.EmailField() 

Voici à quoi ressemble ma forme.

class UserCreationFormExtended(UserCreationForm): 
    def __init__(self, *args, **kwargs): 
     super(UserCreationFormExtended, self).__init__(*args, **kwargs)  
     self.fields['email'].required = True 
     self.fields['first_name'].required = False 
     self.fields['last_name'].required = False 
    class Meta: 
     model = User 
     fields = ('username', 'first_name', 'last_name', 'email') 

Il fonctionne très bien lors de l'enregistrement, comme je l'ai besoin permettent aux utilisateurs de mettre le nom d'utilisateur et le courrier électronique, mais quand il va à l'édition de profils affiche trop de champs. Je ne voudrais pas qu'ils puissent éditer le nom d'utilisateur et le courrier électronique. Comment pourrais-je désactiver les champs dans le formulaire?

Merci pour votre aide.

Répondre

0

Ce que je l'ai fait est que je créé une nouvelle forme et l'a utilisé et cela a fonctionné. Il permet d'éditer des champs du modèle d'utilisateur non seulement UserExtended. Merci pour l'aide.

UserProfileForm classe (forms.ModelForm):

def __init__(self, *args, **kwargs): 
    super(UserProfileForm, self).__init__(*args, **kwargs) 
    try:    
     self.fields['first_name'].initial = self.instance.user.first_name 
     self.fields['last_name'].initial = self.instance.user.last_name 
     self.fields['email'].initial = self.instance.user.email 
    except models.User.DoesNotExist: 
     pass 

email = forms.EmailField(label = "Główny adres email", 
         help_text="", 
         required=True) 
first_name = forms.CharField(label = "Imię", 
          required=False) 
last_name = forms.CharField(label = "Nazwisko", 
          required=False) 
kod_pocztowy = forms.RegexField('\d{2}-\d{3}', 
           required = False, 
           label="Kod pocztowy", 
           error_messages={"invalid":'Poprawna wartość to np: 41-200'}) 

class Meta: 
    model = UserExtended 
    exclude = ('user') 

def save(self, *args, **kwargs): 
    u = self.instance.user 
    u.email = self.cleaned_data['email'] 
    u.first_name = self.cleaned_data['first_name'] 
    u.last_name = self.cleaned_data['last_name'] 
    u.kod_pocztowy = self.cleaned_data['kod_pocztowy'] 
    u.save() 
    profile = super(UserProfileForm, self).save(*args, **kwargs) 
    return profile 
0

Vous devez créer un autre formulaire, qui exclut les champs que vous ne voulez pas (ou ne les spécifiez simplement pas dans la liste des champs). Passez ensuite les 2 formulaires différents aux vues d'enregistrement et d'édition de profil.

0

Essayez de supprimer « nom d'utilisateur » et « email » champs Meta:

class Meta: 
    model = User 
    fields = ('first_name', 'last_name') 
Questions connexes