我试图覆盖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'
答案 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