2016-08-16 6 views
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 %} 

答えて

2

あなたは、そのフィールドに

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") 
    return password # <-- add this line 
+0

を返却する必要がある(def clean_myfieldを使用して)Djangoのフォームフィールドをきれいにした場合うわー、ありがとうございました。それは、登録が機能していた時間の後にその機能を追加して以来、意味があります。感謝します。 – BigMonkey89WithaLeg

+0

@ BigMonkey89WithaLeg喜んで助けてください - 問題が解決したら、これがあなたの質問に対する解決策であることを記してください。ありがとう –

関連する問題