2017-08-16 7 views
0

J'ai un formulaire d'enregistrement qui génère en vue. Maintenant, je dois ajouter quelques champs d'un autre modèle. Comment changer de vue pour ajouter des champs d'un autre modèle?Comment ajouter des champs supplémentaires au formulaire d'inscription django?

Voici mon code de vue:

def register(request): 
    """ User registration """ 
    if auth.get_user(request).username: 
     return redirect('/') 

    context = {} 
    context.update(csrf(request)) 
    context['form'] = UserCreationForm() 
    if request.POST: 
     newuser_form = UserCreationForm(request.POST) 
     if newuser_form.is_valid(): 
      newuser_form.save() 
      newuser = auth.authenticate(username=newuser_form.cleaned_data['username'], 
            password=newuser_form.cleaned_data['password2']) 
     auth.login(request, newuser) 
     return redirect('/') 
     else: 
      context['form'] = newuser_form 

    return render(request, 'user_auth/user_auth_register.html', context) 
+1

Essayez 'UserCreationForm' – bakatrouble

+0

le sous-classement Peut-être que ce sera utile pour quelqu'un https://simpleisbetterthancomplex.com/tutorial/2017/02/18/how-to-create-user-sign-up-view.html –

Répondre

1

Quelque chose comme cela devrait vous aider:

from django import forms 
from django.contrib.auth.models import User 
from django.contrib.auth.forms import UserCreationForm 

class UserCreateForm(UserCreationForm): 
    extra_field = forms.CharField(required=True) 

    class Meta: 
     model = User 
     fields = ("username", "extra_field", "password1", "password2") 

    def save(self, commit=True): 
     user = super(UserCreateForm, self).save(commit=False) 
     user.extra_field = self.cleaned_data["extra_field"] 
     if commit: 
      user.save() 
     return user 

Fondamentalement, l'extension UserCreationForm et en ajoutant un champ supplémentaire. En outre, enregistrez-le dans la méthode save().

Espérons que ça aide.

+0

Peut-être que c'est une question stupide, je suis nouveau sur python et django mais cela fonctionnera-t-il si j'ai besoin de sauvegarder des données de mon champ supplémentaire personnalisé dans mon propre modèle comme 'UserInfo' par exemple? Il ne reste pas clair pour moi Merci! –

+0

@RomanKozinets Si vous avez besoin d'un comportement personnalisé, vous devez personnaliser le modèle 'save()'. Vous pouvez faire ce que vous voulez avec votre 'extra_field' là. –