Django __init __()使用CreateView获得了一个意外的关键字参数

时间:2014-12-27 21:49:09

标签: python django django-views

我试图覆盖get_form()的{​​{1}}方法。我的网页有两个相同的表单 - 一个用于添加"已注册"团队和另一个用于添加"未注册的"球队。如果要添加未注册的团队,我想将表单的team_name字段设置为"可用"。正如您在下面的代码中所看到的,我尝试通过覆盖CreateView方法

来实现此目的
get_form()

但这给了我错误class TeamCreateView(LeagueContextMixin, CreateView): model = Team form_class = TeamForm template_name = "leagueapp/editleague.html" registered = False # the correct value of registered is passed in urls.py depending on the url that gets hit # Overwrite the get_success_url() method def get_success_url(self): return '/league/editleague/' + self.kwargs.get('league_id') def get_form(self, form_class): form_kwargs = self.get_form_kwargs() if not self.registered: form_kwargs['team_name'] = "Available" return form_class(**form_kwargs) 。我做错了什么和/或有更好的方法来解决这个问题吗?

编辑: 这是我的TeamForm

__init__() got an unexpected keyword argument 'team_name'

3 个答案:

答案 0 :(得分:1)

您已在__init__上定义了一个TeamForm方法,该方法不允许存在参数team_name,这就是解压缩{{1}时出现TypeError的原因进入那个form_kwargs。更新__init__()以接受新的kwarg或将__init__重写为

__init__

答案 1 :(得分:1)

您不会传递值以形成初始化。听起来您想要做的是为团队名称提供自定义初始数据,因此您应该更新initial字典:

    if not self.registered:
        form_kwargs.setdefault('initial', {}).update(name="Available")

答案 2 :(得分:0)

最后发现我可以像这样更改get_form方法:

def get_form(self, form_class):
    if self.registered:
        myform = super().get_form(form_class)
    else:
        myform = TeamForm({'team_name':'Available', 'team_payment':0.00, 'registered':False})
    return myform