2016-03-06 40 views
1

我做了一個自定義的用戶表單,它的工作原理是註冊和一切。但是當我嘗試登錄時,我的用戶沒有來自自定義窗體的任何屬性。讓我告訴你: models.pyDjango登錄沒有得到所有的字段

class RegisterUser(models.Model): 
    user=models.OneToOneField(User,on_delete=models.CASCADE) 

    biography = models.CharField(max_length=1000000,blank=True) 
    research_place = models.CharField(max_length=1000000,blank=True) 
    studies = models.CharField(max_length=1000000,blank=True) 

forms.py

class RegistrationForm(UserCreationForm): 

    fname = forms.CharField(max_length=256, label="", required=True, widget=forms.TextInput(attrs={'class': 'form-control','placeholder': 'First Name','required':True})) 
    lname = forms.CharField(max_length=256, label="", required=True, widget=forms.TextInput(attrs={'class': 'form-control','placeholder': 'Last Name','required':True})) 
    email = forms.EmailField(max_length=256, label="Email", required=True, widget=forms.EmailInput(attrs={'class': 'form-control','placeholder': 'Email','required':True, 'type':'email'})) 
    emailConfirm = forms.EmailField(max_length=256, label="", required=True, widget=forms.EmailInput(attrs={'class': 'form-control','placeholder': 'Confirm Email','required':True, 'type':'email'})) 
    password1 = forms.CharField(max_length=256, label="", required=True, widget=forms.PasswordInput(attrs={'class': 'form-control','placeholder': 'Password','required':True})) 
    password2 =forms.CharField(required=False) 

    biography = forms.CharField(label = "Biography",required=False) 
    research_place = forms.CharField(label="Research Place",required=False) 
    studies = forms.CharField(label="Studies",required=False) 

    # class Meta(UserCreationForm.Meta): #extra bit of info 
    # model = user 
    # fields = ('email','emailConfirm','password1','biography','research_place','studies') 
    class Meta(): #extra bit of info 
     model = User 
     fields = ('email','emailConfirm','password1','biography','research_place','studies') 
    def clean_username(self): 
     username = self.cleaned_data["username"] 
     try: 
      user.objects.get(username=username) 
     except user.DoesNotExist: 
      return username 
     raise forms.ValidationError(self.error_messages['duplicate_username']) 

    def save(self,commit=True): 
     user = super(RegistrationForm,self).save() 
     user.first_name=self.cleaned_data['fname'] 
     user.last_name=self.cleaned_data['lname'] 
     # user.set_password(self.cleaned_data['password1']) 
     user.username = self.cleaned_data['email'] 
     user.save() 

     r_user = RegisterUser(user=user,biography="default1", research_place="default2", studies="default3") 
     if commit: 
      r_user.save() 
      # print ('saving user: %s' % self.user) 
     return r_user 

最後登錄視圖:

email=request.POST.get('email','') 
password = request.POST.get('password','') 
user = authenticate(username=email,password=password) 

print(email) 
print(password) 
print(user) 
if user is not None: 
    print("notNone") 
    login(request,user) 
    return HttpResponseRedirect("out") 

但如果我不{{user.biography}}在一個模板,什麼都沒有顯示。 has_attr也顯示用戶沒有傳記屬性。有誰知道最新情況?

回答

1

biography字段是在RegisterUser模型,而不是User模型。所以你必須做{{ user.registeruser.biography }}而不是{{ user.biography }}