Я пытаюсь вызвать ошибку и показать ее в браузере, если пользователь вводит отправку ввода электронной почты, уже находящейся в базе данных. По некоторым причинам вместо сообщения об ошибке в базе данных ничего не сохраняется, но пользователь перенаправляется на страницу, на которую я настроен для перенаправления.
Я хочу иметь возможность остановить пользователя и вызвать ошибку, если в базе данных существует электронное письмо.
Модель:
class Foo(models.Model):
full_name = models.CharField(max_length=50)
email = models.EmailField(max_length=50, blank=False)
phone_number = models.CharField(max_length=10, blank=False)
Формы.
from django import forms
from .models import Foo
class FooModelForm(ModelForm):
class Meta:
model = Foo
fields = ['full_name',
'email',
'phone_number']
help_texts = {'full_name': ('Required'),
'email': ('Required'),
'phone_number': ('Required')}
def clean_email(self):
'''
Check if exists in database.
'''
email = self.cleaned_data.get('email')
try:
match = Foo.objects.get(email=email)
except Foo.DoesNotExist:
return email
# raise forms.ValidationError('This email is already in use.')
from django.shortcuts import render, redirect
from snippets.models import Foo
from snippets.forms import FooModelForm
def index(request):
if request.method == 'POST':
form = FooModelForm(request.POST)
if form.is_valid():
form.save()
return redirect('snippets:form-sent')
else:
form = FooModelForm()
context = {'form':form}
return render(request, 'snippets/index.html', context)
HTML
<form method="post" id="form">
{% csrf_token %}
{{ form|crispy }}
<div class="text-center">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</form>
Я совершенно потерян здесь настолько просто, насколько это возможно.
Любая помощь будет высоко ценится.