问题描述
>>>forms.py
class UserRegistrationForm(forms.ModelForm):
...
...
...
def clean_email(self):
username = self.cleaned_data['username']
email = self.cleaned_data['email']
users = User.objects.filter(email__iexact=email).exclude(username__iexact=username)
if users:
raise forms.ValidationError("Email's already taken.")
return email.lower()
def clean_username(self):
username = self.cleaned_data['username']
try:
user = User.objects.exclude(pk=self.instance.pk).get(username=username)
except User.DoesNotExist:
return username
raise forms.ValidationError("Username's already taken.")
当我输入已经使用的用户名时,出现错误屏幕:
/ account / register /
处的KeyError
'用户名'
请求方法:POST
请求网址:http://127.0.0.1:8000/account/register/
Django版本:3.1.1
异常类型:KeyError
异常值:“用户名”
例外位置:C:\ Users \ user \ Desktop \ esh \ myshop \ account \ forms.py,第58行,在clean_email
而且我也不知道如何覆盖无效的电子邮件错误消息。
解决方法
答案是
def clean_email(self):
email = self.cleaned_data['email']
users = User.objects.filter(email__iexact=email)
if users:
raise forms.ValidationError("Custom text about email.")
return email.lower()
def clean_username(self):
username = self.cleaned_data['username']
users = User.objects.filter(username__iexact=username)
if users:
raise forms.ValidationError("Custom text about username.")
return username
我测试了它,并且效果很好。