EDIT:あなたがバックグラウンドストーリーをスキップしてちょうどエラーメッセージとコードをチェックしたい場合は、すべての下:)私は「「ユーザー」オブジェクトには属性「バックエンド」を持っていない
ATのダンプ今半日のユーザー登録フォームを実装しようとしていて、私はまだ近いが、まだ近くにいるわけではないと感じている。
だから私はUserCreationForm
で構築されたDjangoを実装することから始めました。そして、私のビューのために、私はこのquestionへの応答に触発されたコードのこの部分をcunstructed:
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import login
def create_user(request):
if request.method == "POST":
form = UserCreationForm(request.POST)
if form.is_valid():
new_user = User.objects.create_user(**form.cleaned_data)
login(new_user)
return redirect('post_list')
else:
form = UserCreationForm()
return render(request, 'blog/create_user.html', {'form': form})
問題だった:私は、ユーザーが同様に彼らの電子メールを保存できるようにしたかったです。だから私はforms.py
ファイルにUserCreationForm()
を拡張するために、このblogからコードの一部を使用することにしました:
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class UserCreateForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ("username", "email", "password1", "password2")
def save(self, commit=True):
user = super(UserCreateForm, self).save(commit=False)
user.email = self.cleaned_data["email"]
if commit:
user.save()
return user
私は、実際のウェブページを(チェックされている場合それはまだ私が切り替わった後も、電子メールの部分を含めることを拒否しましたアウト:from django.contrib.auth.forms import UserCreationForm
~from .forms import UserCreationForm
)。最後に、views.py
とforms.py
ファイルの両方で、自分のforms.pyファイルの名前をUserFormに変更しました。だから、forms.py
ファイルで、それは今言った:このquestionに触発
class UserForm(UserCreationForm):
ソリューション。
だから私は "もちろん、私は自分のフォームからcreate_userに辞書を渡していますが、UserCreationForm
と改ざんしてしまったので、これ以上はスムーズに実行されません:create_userは持っています?。ユーザー名、メールアドレスとパスワード右しかし、今、私は、ユーザー名、電子メール、パスワード1とパスワード2を送信してい
は、だから私はviews.py
のコードに次を追加しました:
if form.is_valid():
username = form.cleaned_data["username"]
email = form.cleaned_data["email"]
password = form.cleaned_data["password1"]
new_user = User.objects.create_user(username, email, password)
login(new_user)
だから今、私はTypeError at /create_user/: login() takes exactly 2 arguments (1 given)
を取得し、本当に私の歯車を粉砕するのは、私が改ざんする前にこれがどういう問題ではなかったかということですUserCreationForm
(私の思い込みの中で最高です)。しかし、大丈夫、大丈夫、私は、それをグーグルドキュメントといくつかの例を読んで、ほとんどの人は、私は再び私のコードを変更login(request, user)
でログイン機能を呼び出すようになりますよ:
new_user = User.objects.create_user(username, email, password)
login(request, new_user)
そしてここで、私は」私が得るようメートルは最終的に行き詰まりで:
'User' object has no attribute 'backend'
私はそれをGoogleとのいずれか私は私の状況と相関するか、私はそれがないことを確認するために頭の悪いしね何かを見つけることはありません。何が間違っているのか説明できる人がいるなら、私はそれを高く評価します。
現在のコードのコードダンプ:
は、他のビューと可読性
views.py
from django.shortcuts import render
from .forms import UserForm
from django.shortcuts import redirect
from django.contrib.auth.models import User
from django.contrib.auth import login
def create_user(request):
if request.method == "POST":
form = UserForm(request.POST)
if form.is_valid():
username = form.cleaned_data["username"]
email = form.cleaned_data["email"]
password = form.cleaned_data["password1"]
new_user = User.objects.create_user(username, email, password)
login(new_user)
return redirect('post_list')
else:
form = UserForm()
return render(request, 'blog/create_user.html', {'form': form})
形態のための無関係な輸入を省略します。docsからPY
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class UserForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ("username", "email", "password1", "password2")
def save(self, commit=True):
user = super(UserForm, self).save(commit=False)
user.email = self.cleaned_data["email"]
if commit:
user.save()
return user