0
私はDjangoでユーザ登録フォームを作成しましたが、テストするたびにパスワードが入力されるのでユーザはデータベースに保存されませんそれが起こった "このフィールドはnullにすることはできません私は以前にフォームが動作して以来、これが起こっている理由を理解していない、それは他の登録フォームと同じ手順に従います。私はまだフィールドがnullであり、まだ動作しない方法を理解していませんが、ターミナルでは、エラーメッセージが表示されず、ユーザーが管理者経由で作成されているため、ログインフォームが機能しています。私が使用しているコードDjangoのユーザ登録フォームがパスワードを返さないようにする方法
ユーザーフォーム
class UserForm(forms.ModelForm):
email = forms.EmailField(label="Email Address")
password = forms.CharField(widget=forms.PasswordInput)
class Meta:
model = User
fields = ['first_name', 'last_name', 'username', 'email', 'password']
def clean_email(self):
email = self.cleaned_data.get('email')
email_qs = User.objects.filter(email=email)
if email_qs.exists():
raise forms.ValidationError("This email already exists.")
return email
def clean_username(self):
username = self.cleaned_data.get('username')
username_qs = User.objects.filter(username=username)
if username_qs.exists():
raise forms.ValidationError("This username already exists.")
return username
def clean_password(self):
password = self.cleaned_data.get('password')
if len(password) <= 8:
raise forms.ValidationError("Password must be longer than 8 characters")
else:
print("password saved")
マイビューの登録機能
def register_view(request):
form = UserForm(request.POST or None)
if form.is_valid():
user = form.save(commit=False)
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user.set_password(password)
user.save()
new_user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, new_user)
return redirect('/appname/account/')
return render(request, "appname/index.html", {"form": form})
マイHTML
% block signup %}
<div clss="container-fluid">
<div class="row">
<div class="col-sm-6" style="background-color:yellow;">
<h1>appname</h1>
<p>x and x</p>
</div>
<div>
<div class="col-sm-6">
<h3>Sign Up</h1>
<form method="POST" action="{% url 'appname:index' %}">
{% csrf_token %}
{{ form }}
<input type="submit" class="btn" value="Sign Up"/>
</form>
<h5>Have an Account? <a href="{% url 'appname:login' %}">Login</a></h5>
</div>
</div>
</div>
</div>
{% endblock %}
を返却する必要がある(
def clean_myfield
を使用して)Djangoのフォームフィールドをきれいにした場合うわー、ありがとうございました。それは、登録が機能していた時間の後にその機能を追加して以来、意味があります。感謝します。 – BigMonkey89WithaLeg@ BigMonkey89WithaLeg喜んで助けてください - 問題が解決したら、これがあなたの質問に対する解決策であることを記してください。ありがとう –