2016-08-16 52 views
0

我已經在Django中創建了一個用戶註冊表單,但每次測試時,用戶都沒有被保存到數據庫,因爲當輸入密碼時它提出了「這個領域不能爲空,我不明白爲什麼這種情況發生以來,這個表格之前工作,它遵循相同的程序作爲其他登記表格,我一直試圖找出問題的原因爲天我仍然不理解該字段如何可以爲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_myfield),你需要返回現場

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

Django的表單字段哇,非常感謝,修正了它。這是有道理的,因爲我在註冊工作之後添加了該功能。欣賞它。 – BigMonkey89WithaLeg

+0

@ BigMonkey89WithaLeg樂於提供幫助 - 如果解決了問題 - 請註明這是您的問題的解決方案。謝謝 –

相關問題