2016-04-05 11 views
0

Bu, çözemediğim temel bir soruna benziyor. Sadece bir metin kutusu ve bir gönder düğmesiyle basit bir HTML sayfası var. Metin kutusunun e-posta alması gerekiyordu Kullanıcıların kimlikleri ve gönderme düğmesini tıklatarak DB içinde saklayın.A normal e-posta biçimi doğrulamadan, ayrıca e-posta zaten DB'de mevcut olup olmadığını kontrol etmeliyim ve sonra kullanıcı bilgilendirin.Mod aşağıdaki gibidir:benzersiz e-postaları kontrol etmek için django'da form doğrulaması

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>

Bu button.However göndermek tıklayarak üzerine DB-postalar kaydeder, mevcut e-posta için denetler asla ids ve DB'm çok sayıda yinelenen kimliğe sahip. Ne yapıyorum?

+0

isim ver 'def check_duplicate_email (öz) için

def clean_email(self): data = self.cleaned_data['email'] if User.objects.filter(email=data).count() > 0: raise forms.ValidationError("We have a user with this user email-id") return data

:' 'üzere def clean_email (self): '. [dokümanlar] 'ı denetleyin (https://docs.djangoproject.com/en/1.9/ref/forms/validation/#cleaning-a-specific-field-attribute). – JRodDynamite

+0

bunu yaptı ve şimdi DB'ye hiçbir şey kazandırmıyor .. – Amistad

cevap

1

from.is_valid() sizin check_duplicate_email() fonksiyonu çağırma.
Böyle özel doğrulama yazabilirsiniz: bir daha örnek Custom form validation

1

Sen e-posta alanına unique=True flag kullanabilirsiniz:

email = models.EmailField(max_length=200, unique=True)

+0

şablonlar için form doğrulamasında bir hata olarak yayılacak mı? – Amistad

+0

evet öyle olacak - sadece hata etiketlerini – dpdenton

+0

şablonunda gösterdiğinizden emin olun Bu işe yaradı mı? – dpdenton

İlgili konular