【问题标题】:Overriding Django Default Authentication Form覆盖 Django 默认身份验证表单
【发布时间】:2019-05-22 03:56:55
【问题描述】:

我正在尝试覆盖 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

【问题讨论】:

  • this 回答会帮助你。只需查看 init 方法中的行。

标签: django django-models django-forms django-views


【解决方案1】:

@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)}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-13
    • 2015-09-14
    • 1970-01-01
    • 2019-07-16
    • 2011-05-10
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    相关资源
    最近更新 更多