首页 > 解决方案 > 如何在 Django 中打印 forms.ValidationError

问题描述

在教程中发现了这一点,但“密码和确认密码不匹配”没有打印到 html 页面。

from django import forms
from django.contrib.auth.models import User


class UserForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput)
confirm_password = forms.CharField(widget=forms.PasswordInput())
first_name = forms.CharField(max_length=30)
last_name = forms.CharField(max_length=30)
email = forms.EmailField(max_length=254)

class Meta:
    model = User
    fields = ['username', 'first_name', 'last_name', 'email', 'password','confirm_password']

def clean(self):
    cleaned_data = super(UserForm, self).clean()
    password = cleaned_data.get("password")
    confirm_password = cleaned_data.get("confirm_password")

    if password != confirm_password:
        raise forms.ValidationError(
            "password and confirm_password does not match"
        )

更新:在模板中使用 {{form.non_field_errors}}。

标签: djangoforms

解决方案


您可以通过多种方式做到这一点,从您的视图,也从您的模型中

Class UserForm(forms.ModelForm):
pass

    def clean_password(self):
        data = self.cleaned_data
        password = self.cleaned_data.get('password')
        confirm_password = self.cleaned_data.get('confirm_password')

        if password != confirm_password:
            raise forms.ValidationError('Passwords must be same')

顺便说一句,如果使用 Python 3.6 那么 super().method_name(args),如果使用 2.7 那么 super(class_name,self).method_name(args)


推荐阅读