#django
#django
Вопрос:
Я вызываю пользовательскую ошибку проверки в поле электронной почты, которая принимает только 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:
Вы можете сделать это следующим образом:
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
Комментарии:
1. Спасибо, это спасло мой день, кстати, для чего _, используйте.
2. разделение с помощью
@
вернет 2 результата. Я улавливаю это с помощью_, domain
. Итак,_
будетxyz
, если я разделюxyz@gmail.com
3. Как я могу обойти ошибку проверки, электронное письмо принимается при обновлении профиля пользователя
if email_exists.exists(): raise forms.ValidationError("Email is taken")
4. Не могли бы вы задать новый вопрос по этому поводу? 🙂 его вид вне контекста для текущего 🙂 Также, пожалуйста, поделитесь со мной вопросом, я буду рад вам помочь.
5. Я просто редактирую свой вопрос выше, я не могу обновить first_name и last_name ошибка проверки электронной почты «Электронное письмо принято» всегда появляется