我有一个引用{{registeredteamform.team_name}}之类的表单的模板,但是Django的基于通用类的视图使用键形式传递表单'。我没有更改模板中的表单名称(我处理多表单情况),而是希望更改传递给模板的表单的键。
我尝试扩展render_to_response
方法,如此
def render_to_response(self, context, **response_kwargs):
response_kwargs['registeredteamform'] = context['form']
return super().render_to_response(self, context, **response_kwargs)
但这会引发错误render_to_response() takes 2 positional arguments but 3 were given
。那么,我如何更改表单键并且render_to_response是否适合这样做呢? (我是CreateView
)的子类,
答案 0 :(得分:2)
您获得的错误是因为您使用超级的方式。对于Python 2.7,self
位于super()
,并且您根本不需要为Python 3传递自我。
return super(MyClassView, self).render_to_response(context, **response_kwargs)
return super().render_to_response(context, **response_kwargs)
如果您深入了解CreateView
,您会看到get()
表单实际上已分配给form
密钥。
def get(self, request, *args, **kwargs):
"""
Handles GET requests and instantiates a blank version of the form.
"""
form_class = self.get_form_class()
form = self.get_form(form_class)
return self.render_to_response(self.get_context_data(form=form))
您可以按照现在的方式添加密钥,但form
密钥仍会被分配。
我可能会建议覆盖get()
。
def get(self, request, *args, **kwargs):
self.object = None
form_class = self.get_form_class()
form = self.get_form(form_class)
return self.render_to_response(self.get_context_data(registeredteamform =form))