2017-02-14 92 views
-1

我正在尝试创建一个注册表单,其中包含添加到配置文件模型的信息,但是当我提交时,它会一直给我一个匿名用户。我在这里做错了什么?Django注册表单,匿名用户?

我forms.py:

class RegisterForm(forms.ModelForm): 
    Gebruikersnaam = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Gebruikersnaam'}), max_length=20, label="") 
    Wachtwoord = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Wachtwoord'}), label="") 
    Emailadres = forms.EmailField(required=False, widget=forms.TextInput(attrs={'placeholder': 'E-mailadres'}), label="") 
    Profielfoto = forms.ImageField(required=False, label="") 
    Biografie = forms.CharField(required=False, widget=forms.TextInput(attrs={'placeholder': 'Biografie'}), max_length=150, label="") 

class Meta: 
    model = Profiel 
    fields = ['Gebruikersnaam', 'Wachtwoord', 'Emailadres', 'Profielfoto', 'Biografie'] 

我的models.py:

class Profiel(models.Model): 
    user = models.OneToOneField(User, primary_key=True) 
    Profielfoto = models.ImageField() 
    Biografie = models.CharField(max_length=150) 

和我Views.py:

def step3(request): 

    if request.method == 'POST': 
     form = RegisterForm(request.POST) 
     if form.is_valid(): 
      Registratieform = form.save(commit=False) 
      username = form.cleaned_data['Gebruikersnaam'] 
      password = form.cleaned_data['Wachtwoord'] 
      user = authenticate(username=username, password=password) 

      Registratieform.user = request.user # Set the user object here 
      Registratieform.save() # Now you can send it to DB 
      if Registratieform.user is not None: 
       if Registratieform.user.is_active: 
        login(request, Registratieform.user) 
        return redirect('/Dashboard/') 

      return render_to_response("Home/index.html", {'form': form}) 
    else: 
     form = RegisterForm() 
    return render(request, 'Home/index.html', {'form': form}) 

回答

0

当然,用户是未经验证的,准备报名。你期望authenticate返回一个现有的用户?你至少应该检查它确实是否会返回一个用户;如果是的话,你应该使用那个结果而不是request.user。 (另外,关于命名的说明;您应该为实例使用小写名称,例如form.save()的返回值。还要注意,结果是Profiel模型的一个实例,而不是形式;所以你不应该把它称为“Registratieform”但profiel

编辑要创建用户,请拨打User.objects.create_user

if form.is_valid(): 
    profiel = form.save(commit=False) 
    username = form.cleaned_data['Gebruikersnaam'] 
    password = form.cleaned_data['Wachtwoord'] 
    email = form.cleaned_data['Emailadres'] 
    user = User.objects.create_user(username=username, password=password, email=email) 
    profiel.user = user 
    profiel.save() 
+0

用户确实是登记前未认证。我应该如何使用提交的表单正确创建用户?我还在学习,不能解决这个问题.. – Acework