【问题标题】:Django change email/username already exists and email isn't valid error messagesDjango 更改电子邮件/用户名已经存在并且电子邮件不是有效的错误消息
【发布时间】:2021-01-04 09:55:03
【问题描述】:

我正在尝试将这些错误消息更改为自定义,这里是代码:

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

而且我不知道如何覆盖无效的电子邮件错误消息。

【问题讨论】:

  • 我更改了无效的电子邮件:error_messages = { 'email' : { 'invalid' : '自定义文本。' } }

标签: python django django-forms keyerror


【解决方案1】:

答案是:

    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

我测试过,效果很好。

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 2014-05-15
    • 2021-02-06
    • 1970-01-01
    • 2017-01-28
    • 2013-08-22
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多