Поднимите ошибку проверки в электронной почте, которая принимает Yahoo, Gmail и Outlook только - PullRequest
0 голосов
/ 19 апреля 2019

Я поднимаю пользовательскую ошибку проверки в поле электронной почты, которое принимает только Yahoo, Gmail и Outlook. Что я тут не так делаю?

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from .models import Profile, Testimonial

class UserUpdateForm(forms.ModelForm):
  username = forms.CharField()
  first_name = forms.CharField()
  last_name = forms.CharField()
  email = forms.EmailField()

  class Meta:
    model = User
    fields = ['username', 'email', 'first_name', 'last_name']

  def clean_email(self):
    email = self.cleaned_data.get('email')
    email_exists = User.objects.filter(email=email) 
    accepted_domains = ['gmail.com', 'yahoo.com', 'outlook.com', 'hotmail.com'] 
    username = self.cleaned_data.get('username')  
    _, domain = email.split('@')
    if email_exists.exists():     
      raise forms.ValidationError("Email is taken") 
    elif domain.lower() not in accepted_domains:      
      raise forms.ValidationError("Invalid email")
    return email   

1 Ответ

1 голос
/ 19 апреля 2019

Вы можете сделать это так:

accepted_domains = ['gmail.com', 'yahoo.com', 'outlook.com']

_, domain = email.split('@')
if email_exists.exists() and not self.instance and self.instance.pk==None:
  raise forms.ValidationError("Email is taken") 
if domain.lower() not in accepted_domains:
  raise forms.ValidationError("Email should be gmail, yahoo and outlook only")
return email
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...