如何使用基于类的视图更改传递给模板的表单的键

时间:2014-12-26 01:18:53

标签: python django forms inheritance

我有一个引用{{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)的子类,

1 个答案:

答案 0 :(得分:2)

您获得的错误是因为您使用超级的方式。对于Python 2.7,self位于super(),并且您根本不需要为Python 3传递自我。

Python 2.7:

return super(MyClassView, self).render_to_response(context, **response_kwargs)

Python 3:

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