2016-02-27 73 views
0

我想創建一個自定義註冊表單,但我不知道該怎麼做,因爲我試圖將默認的django註冊與新模型連接起來。如何在Django中創建一個配置文件註冊表單?

這是它的樣子,它可能是錯的,但我在想這樣的事情。

models.py

class Profile(models.Model): 
    user = models.OneToOneField(User) 
    name = models.CharField(max_length=20, blank=True, null=True) 
    description = models.TextField(max_length=400) 

views.py

def register_user(request): 
    if request.user.is_authenticated(): 
     return HttpResponseRedirect('/user/') 
    else: 
     if request.method == 'POST': 
      form = MyRegistrationForm(request.POST) 
      if form.is_valid(): 
       form.save() 
       return HttpResponseRedirect('/user/') 

     context = {'profil':Profile.objects.all()} 
     context.update(csrf(request)) 
     context['form'] = MyRegistrationForm() 

     return render(request, 'register.html', context) 

forms.py

class MyRegistrationForm(UserCreationForm): 
    email = forms.EmailField(required=True) 

    class Meta: 
     model = User 
     fields = {'username', 'password1', 'password2', 'email'} 

    def save(self, commit=True): 

     my_user = super(MyRegistrationForm, self).save(commit=False) 
     my_user.email = self.cleaned_data['email'] 

     new_profile = Profile(user=my_user, name="John", description="a person") 

     if commit: 
      new_profile.save() 

     return new_profile 

REGIST er.py

<form action="/user/register/" method="post" id="register" autocomplete="off"> 
{% csrf_token %} 
<div class="fieldWrapper"> 
    {{ form.username.errors }} 
    {{ form.username.label_tag }} 
    {{ form.username }} 
</div> 
[... other fiels ...] 
<input type="submit" value="Register"/> 
</form> 

我試圖與表單模型連接,所以當有人註冊,當我在這樣的模板鍵入他的名字:{{user.name}}它應該是「約翰」。

我該如何實現這個目標?

回答

2
爲了在模板中得到名字你有因爲名字被保存在剖面模型

訪問它像{{ user.profile.name }},如果你想創建一個窗體爲您的個人資料的模型,你可以做

而且像這樣

class ProfileForm(forms.ModelForm): 
    class Meta: 
     model = Profile 
     fields = ("name", "description") 

此外,如果你打算使用兩個UserCreationForm並在相同的HTML的ProfileForm兩個表格,您應該添加前綴他們知道哪些數據屬於哪種形式,看看怎麼辦它在這裏https://docs.djangoproject.com/en/1.9/ref/forms/api/#prefixes-for-forms

編輯

def register_user(request): 
    #... 
    if request.method == "POST": 
     user_form = UserCreationForm(request.POST, prefix="user") 
     profile_form = ProfileForm(request.POST, prefix="profile") 
     if user_form.is_valid() and profile_form.is_valid(): 
      user = user_form.save(commit=False) 
      user.save() 
      profile = profile_form.save(commit=False) 
      profile.user = user 
      profile.save() 
      return redirect('/') 
    else: 
     user_form = UserCreationForm(prefix="user") 
     profile_form = ProfileForm(prefix="profile") 
    context = { 
     "user_form": user_form, 
     "profile_form": profile_form 
    } 
    return render(request, 'register.html', context) 

然後在模板

<form action="/user/register/" method="post" id="register" autocomplete="off"> 
{% csrf_token %} 
<div class="fieldWrapper"> 
    {{ user_form }} 
    {{ profile_form }} 
</div> 
<input type="submit" value="Register"/> 

+0

我想你提出最後的解決方案,但我怎麼能註冊一個可以驗證的用戶,(字段=用戶名,電子郵件,密碼1,密碼2,名稱,說明) – Lindow

+0

我編輯了一個問題,我希望它有幫助 – eustass

+0

Worke d!令人驚歎的答案非常感謝你 – Lindow

相關問題