Это выглядит как основная проблема, которую я не смог решить. У меня есть простая HTML-страница с текстовым полем и кнопкой отправки. Текстовое поле должно принимать электронную почту ids от пользователей и хранить его в БД при нажатии кнопки отправки. Помимо обычной проверки формата электронной почты, мне также нужно проверить, существует ли в базе данных письмо, а затем информировать пользователя. Мой код выглядит следующим образом:проверка формы в django для проверки уникальных писем
models.py
from __future__ import unicode_literals
from django.db import models
class NotificationEmail(models.Model):
email = models.EmailField(max_length=200)
created = models.DateTimeField(auto_now_add=True)
def __unicode__(self):
return u'%s' % self.email
forms.py
from django import forms
from home.models import NotificationEmail
class NotifyForm(forms.ModelForm):
class Meta:
model = NotificationEmail
fields = ['email']
def check_duplicate_email(self):
data = self.cleaned_data['email']
if NotificationEmail.objects.filter(email=data).exists():
raise forms.ValidationError('Your email is already in our list of users to be notified.Try a new email')
views.py
from django.shortcuts import render
from forms import NotifyForm
def notify(request):
if request.method == 'POST':
form = NotifyForm(request.POST)
if form.is_valid():
form.save()
else:
form = NotifyForm()
return render(request, 'index.html', {'form': form})
index.html
<form class="form-horizontal" method="POST" action ="">
{% csrf_token %}
<button type="submit">Notify Me</button>
{{form.email}}
</form>
Это сохраняет сообщения электронной почты в БД при нажатии на button.However представить, он никогда не проверяет существующую электронную почту ids и моя БД имеет много дубликатов идентификаторов. Что я делаю неправильно?
Rename определение функции check_duplicate_email (самостоятельно): 'в' Защиту clean_email (самостоятельно): '. Проверьте [docs] (https://docs.djangoproject.com/en/1.9/ref/forms/validation/#cleaning-a-specific-field-attribute). – JRodDynamite
сделал это и теперь ничего не сохраняет для БД .. – Amistad