首页 > 解决方案 > 覆盖 Django 默认身份验证表单

问题描述

我正在尝试覆盖 Django AuthorizationForm 的预设错误消息。而不是说这个字段是必需的,我试图让它说用户名是必需的。

我尝试使用标准 LoginView 对 AuthorizationForm 进行子类化,但它没有采用我的自定义清理方法。我查看了这个类似的问题,Change default django error messages for AuthenticationForm并尝试按照其中的提示进行操作,但仍然无法正常工作。在此先感谢您提供有关我可能做错的任何提示。

class AuthenticationForm(AuthenticationForm):
    def __init__(self, *args, **kwargs):
        super(AuthenticationForm, self).__init__(*args, **kwargs)

    def clean(self):
        cleaned_data = super(AuthenticationForm, self).clean()
        username = cleaned_data.get('username')
        password = cleaned_data.get('password')

        if username and password:
            pass
        else:
            self.add_error('username','Username and Password required.')
            pass

我试图让它显示用户名和密码,而不是默认的预设此字段是必需的消息。无论我做什么,我似乎都无法获取上面的代码。我将它存储在我的项目 forms.py 文件中。我相信我错误地将其子类化。我尝试了很多不同的组合,但似乎无法看到这种形式。我正在运行 Django 1.11

标签: djangodjango-modelsdjango-formsdjango-views

解决方案


@Jagjeet Singh 谢谢!

Jagleet 的建议帮助我理解我需要在我的 forms.py 文件中以以下格式定义此表单,以便用户获得我想要的最终结果。

class AuthenticationForm(AuthenticationForm):

    class Meta:
        model = User
        fields = '__all__'

    def __init__(self, *args, **kwargs):
        super(AuthenticationForm, self).__init__(*args, **kwargs)

        for field in self.fields.values():
            field.error_messages = {'required':'{fieldname} is required'.format(
            fieldname=field.label)}

推荐阅读