2017-09-20 55 views
1

我可以添加像地址,城市,州,國家,PIN碼和安全問題和答案的UserCreationForm,目前包含用戶名,電子郵件,密碼1和密碼2的擴展。如果是的話請說明如何?Django UserCreationForm擴展

forms.py

class UserCreationForm(UserCreationForm): 
    email = EmailField(label=_("Email address"), required=True, 
     help_text=_("Required.")) 
    city= forms.CharField(label= _("City"),max_length=20, required=True) 
    state= forms.CharField(label= _("State"),max_length=20, required=True) 

    class Meta: 
     model = User 
     fields = ("username", "email", "password1", "password2","city","state") 

    def save(self, commit=True): 
     user = super(UserCreationForm, self).save(commit=False) 
     user.email = self.cleaned_data["email"] 
     user.city = self.cleaned_data["city"] 
     user.state = self.cleaned_data["state"] 

     if commit: 
      user.save() 
     return user 

回答

1

目前您正在擴展UserCreationForm類,如果您在用戶模型中有其他字段,那麼您可以使用forms.ModelForm並只提及其他字段。

例如

class UserForm(forms.ModelForm): 
    class Meta: 
     model = User 
     fields = ['username','name', 'email', 'phone', 
       'address','city','state', 'first_time'] 
如果你想使用自定義窗體,然後

class UserForm(forms.Form): 
     name = forms.CharField(label= _("Name")) 
     address = forms.CharField(label=_("Address")) 
     etc. 
+0

以及那是做了很多已經完成的事情。這是框架的目的,而不是一次又一次地創建輪子。我不認爲這應該是接受的,但無論如何 – Bestasttung

+0

而這並沒有回答'擴展UserCreationForm'。在這裏,你只是通過它。 – Bestasttung

2

是隻要做你喜歡用電子郵件那樣:

class UserCreationForm: 
    a_field = WhateverField(whatever='whatever'...) 

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

領域現在是在您的形式加入。

+0

好的很酷..謝謝! – Shefali

+0

如何從特定的選擇中使用國家下拉菜單? – Shefali

+0

你可以在'__init __()'''方法中改變你的字段。然後調用super超級用戶(UserCreationForm,self).__ init __(args,kwargs)''''self.fields ['a_field'] ['property'] = ....''' 。但是,這又是一個問題,你應該問一下。 – Bestasttung