Django更改电子邮件/用户名已存在,并且电子邮件不是有效的错误消息

问题描述

我正在尝试将这些错误消息更改为custom,这是代码

>>>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

我测试了它,并且效果很好。