如何使用Django crispy-forms与通用DetailView

时间:2014-01-03 12:30:08

标签: django django-templates django-generic-views django-crispy-forms

如果我根据自己的表单定义自己的视图,那么我可以将我的crispy-forms帮助器添加到Form类定义中。

但如果我使用DetailView中的django.views.generic我没有创建表单,我甚至不需要forms.pyDetailView正在为我做这件事。

在我的模板中,我正在传递对象。

我无法理解如何访问表单以添加帮助程序并设置其属性,以及如何将正确的内容传递给我的模板以便

{% crispy form %}

会奏效。

澄清一下,我正在尝试学习如何使用Django基于通用类的视图。像DefaultView一样。我没有宣布任何表格。我创建了一个视图

from django.views.generic.detail import DetailView

class MyView(DetailView):
    model=MyModel

并使用

进行渲染
url(...... ,MyView.as_view()...)

我的模板接收模型实例作为对象。当我没有表格时,如何将其与脆形式相结合?

我知道如何创建自己的表单并在我的模板中使用crispy,但我想使用通用CBV的DRY组合来保存编写不必要的表单,而不是为我做所有的工作。

如果我创建一个表单,那么我肯定要替换通用CBV所做的工作,我必须编写所有自己的响应处理。如果我理解正确,那就是使用仿制药的火车。

1 个答案:

答案 0 :(得分:1)

您可以覆盖详细信息视图中的“get_context_data”方法以包含表单。 您应该考虑到DetailView是一个 - 显示 - 视图,因此表单在这里没有意义。 无论如何: 查看docs

中的文章示例

您可以执行以下操作:

class MyDetailView(DetailView):

model = MyModel

def get_context_data(self, **kwargs):
    context = super(MyDetailView, self).get_context_data(**kwargs)
    context['form'] = MyForm() 
    return context

表单不会加载任何数据,因此您可以使用“initial”关键字

这是很多工作,所以也许这不是正确的工作通用视图。你想要完成什么?