【问题标题】:Django Forms custom error message in views视图中的 Django Forms 自定义错误消息
【发布时间】:2018-07-15 04:55:49
【问题描述】:

这是我的看法:

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)

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

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

这是我用于电子邮件字段的 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>

如果没有归还学校物品,我怎么能说“找不到学校,请检查您的电子邮件”之类的内容?

谢谢

【问题讨论】:

    标签: django validation django-forms


    【解决方案1】:

    你可以试试 Django 内置的messages 框架。试试这个:

    try:
        school = School.objects.get(email_domain = email)
    except ObjectDoesNotExist:
        messages.error(request, 'School not found, check your email')
    

    然后在表单上方的某处,添加以下内容:

    {% if messages %}
        {% for message in messages %}
            <div class="alert {% if message.tags %} alert-{{ message.tags }}{% endif %}">{{ message|safe }}</div>
        {% endfor %}
    {% endif %}
    

    希望对你有帮助!

    【讨论】:

      【解决方案2】:

      您需要在表单端执行验证。 在表单中实现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
      

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

       {{ form.email.label }}
       {{ form.email }}
       {{ form.email.errrors }}
       {{ form.email.help_text }}
      

      【讨论】:

      • 谢谢你把它整理出来!
      猜你喜欢
      • 2014-07-14
      • 2013-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      • 2019-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多