这是我的观点:
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>
我怎么能说,如果没有退回学校的对象,就会发现“未找到学校,检查你的电子邮件”的内容?
由于
答案 0 :(得分: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
现在在模板中,您可以在email
字段后立即显示此错误:
{{ form.email.label }}
{{ form.email }}
{{ form.email.errrors }}
{{ form.email.help_text }}
答案 1 :(得分:2)
您可以尝试使用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 %}
希望它有所帮助!