Django在视图中形成自定义错误消息

wtr*_*ton 3 django validation django-forms

这是我的看法:

if request.method == 'POST':
        form = TeacherRegister(request.POST)
        #Gets school object from email domain.
        email = form['email'].value().split('@')[1]
        try:
            school = School.objects.get(email_domain = email)
        except ObjectDoesNotExist:
            #add custom error message here

        if form.is_valid():
            user, Teacher = form.save()
            Teacher.school = school
            Teacher.save()
            user.groups.add(Group.objects.get(name='Teacher'))
            #user.is_active to stop users logging in without confirming their emails

            user.is_active = False
            user.save()
            #Sends confirmation link.
            send_confirmation_email(request, user)

            args = {'email': user.email,
                    'link': user.Teacher.school.email_website}

            return render(request, 'email/token_sent.html', args)

        else:
            args = {'form': form,}
            return render(request, 'users/teachers.html', args)
Run Code Online (Sandbox Code Playgroud)

这些行是我正在尝试使用的:

email = form['email'].value().split('@')[1]
try:
    school = School.objects.get(email_domain = email)
except ObjectDoesNotExist:
    #add custom error message here
Run Code Online (Sandbox Code Playgroud)

这是我对电子邮件字段的HTML:

<div class="required field" >
            {{ form.email.label }}
            {{ form.email }}
            {{ form.email.help_text }}
           <!-- <label>Email</label>
           <input placeholder="Email" type="email" name="email" autofocus="" required="" id="id_email"> -->
        </div>
Run Code Online (Sandbox Code Playgroud)

我怎么能说,如果没有返回学校对象,就会发现"未找到学校,检查你的电子邮件"的内容?

谢谢

nev*_*ner 6

您需要在表单端执行验证.实现clean_email方法形式如下:

def clean_email(self):
    email = self.cleaned_data.get('email')
    email = email.split('@')[1] 
    try:
       school = School.objects.get(email_domain = email)
    except ObjectDoesNotExist:
       raise forms.ValidationError(''School not found, check your email')
    return email
Run Code Online (Sandbox Code Playgroud)

现在在模板中,您可以在email字段后立即显示此错误:

 {{ form.email.label }}
 {{ form.email }}
 {{ form.email.errrors }}
 {{ form.email.help_text }}
Run Code Online (Sandbox Code Playgroud)