You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django登录表单报错:BaseForm.__init__()收到意外参数'my_username'求助

解决Django中BaseForm.__init__() got an unexpected keyword argument 'my_username'错误
  • 检查表单类的字段定义
    确认你的表单子类(继承forms.Form或forms.ModelForm)中,确实声明了my_username字段。示例:

    from django import forms
    
    class LoginForm(forms.Form):
        my_username = forms.CharField(label='用户名', max_length=100)
        password = forms.CharField(label='密码', widget=forms.PasswordInput)
    

    若使用ModelForm,需确保关联模型包含该字段,或已手动添加该字段到表单类中。

  • 修正视图中表单的实例化方式
    错误通常源于实例化表单时,将字段作为单独关键字参数传递,而非放入data字典。
    错误示例:

    # 错误:直接传字段为关键字参数
    form = LoginForm(my_username=request.POST.get('username'))
    

    正确写法:

    # 方式1:直接传递POST数据
    form = LoginForm(request.POST)
    # 方式2:构造数据字典后传递
    form_data = {
        'my_username': request.POST.get('username'),
        'password': request.POST.get('password')
    }
    form = LoginForm(form_data)
    

    表单初始化仅接受官方定义的关键字参数(如data、files、initial),自定义字段必须放在data字典内。

  • 检查重写的__init__方法(若有)
    如果你重写了表单的__init__方法,必须正确传递父类所需的参数:

    class LoginForm(forms.Form):
        # 字段定义...
    
        def __init__(self, *args, **kwargs):
            # 先调用父类初始化方法,不可遗漏参数
            super().__init__(*args, **kwargs)
            # 再添加自定义逻辑
            self.fields['my_username'].widget.attrs.update({'class': 'form-control'})
    

    不要在__init__中错误地将表单字段作为参数接收,也不能省略*args和**kwargs的传递。

  • 核对模板中的字段渲染
    确保模板里渲染的字段名与表单类定义一致,比如表单字段是my_username,模板中需写{{ form.my_username }},避免字段名不匹配导致的参数传递错误。

内容的提问来源于stack exchange,提问作者mostafa youssry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 22:07:40