2016-07-20 68 views
0

如何觸發is_valid()的相反情況?這是我迄今所做的那樣:如何在Django中輸出modelform錯誤

def post(self, request): 
     user_form = self.form_class(request.POST) 
     second_form = self.second_form_class(request.POST) 

    if user_form.is_valid() and second_form.is_valid(): 
     user = user_form.save(commit=False) 
     invite = second_form.save(commit=False) 

     username = user_form.cleaned_data['username'] 
     password = user_form.cleaned_data['password'] 
     email = user_form.cleaned_data['email'] 
     code = second_form.cleaned_data['code'] 

     user.set_password(password) 
     user.is_staff = True 
     user.save() 

     user = authenticate(username=username, password=password) 

     if user is not None: 
      if user.is_active: 
       login(request, user) 
       return redirect('main:welcome') 

我要檢查,如果這是真的,但我不知道如何實現它在我的通用視圖:

the_invite = Invites.objects.filter(code=code) 

if the_invite.exists(): 
    the_invite.delete() 
else: 
    second_form.add_error() 

我想簡單地像例如此錯誤信息輸出:「你輸入了錯誤的密碼」:enter link description here

回答

0

「我要簡單地像例如此錯誤信息輸出:‘你輸入了錯誤的密碼’,」

好了,你可以添加錯誤形成這樣的:

form._errors = ErrorDict() 
errors = form._errors.setdefault('[name of the field that failed verification]', ErrorList()) 
errors.append('[Your error message]') 

,然後返回這個形式回到用戶。

0

當形式是無效的,你需要將其發送到模板,並呈現:

{{ form.errors }} 
+0

是的,但只要我在second_form中輸入一個值,例如它即使對象不在數據庫中也是True。我怎麼能檢查一下呢? –

+0

您需要將表單傳遞給模板並呈現錯誤。你的'request.POST'來自哪種形式? – Gocht