2017-08-16 203 views
0

我有一個註冊表單,可以在視圖中生成。現在我需要添加其他模型的一些字段。我應該如何更改視圖以添加來自其他模型的字段?如何添加額外的字段到Django註冊表單?

這裏是我的視圖代碼:

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

嘗試繼承'UserCreationForm' – bakatrouble

+0

也許這將是爲別人 https://simpleisbetterthancomplex.com/tutorial/2017/02/18/how-to-create-user-sign-up-view.html –

回答

1

像這樣的事情應該可以幫助您:

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 

基本上,延長UserCreationForm並添加一個額外的字段。另外,將它保存在save()方法中。

希望它有幫助。

+0

有幫助也許這是個愚蠢的問題,我是python和django的新手,但是如果我需要將自定義額外字段的數據保存到我自己的模型(例如「UserInfo」)中,它會起作用嗎?它一直不清楚 謝謝! –

+0

@RomanKozinets如果你需要自定義行爲,你應該定製'save()'模型。你可以在那裏用'extra_field'做任何你想做的事情。 –

相關問題