2017-02-14 17 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

関連する問題