【问题标题】:How to use Django crispy-forms with generic DetailView如何使用带有通用 DetailView 的 Django 脆表单
【发布时间】:2014-01-21 03:01:59
【问题描述】:

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

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

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

我不知道如何访问表单以添加帮助程序并设置它的属性,以及如何将正确的东西传递给我的模板以便

{% crispy form %}

会起作用的。

为了澄清,我正在尝试学习如何使用 Django 的基于通用类的视图。像默认视图。没有我要声明的表格。我创建一个视图为

from django.views.generic.detail import DetailView

class MyView(DetailView):
    model=MyModel

并用

渲染它
url(...... ,MyView.as_view()...)

我的模板接收模型实例作为对象。当我没有表格时,如何将它与脆皮表格结合起来?

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

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

【问题讨论】:

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


    【解决方案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”关键字

    工作量很大,所以也许这不是该工作的正确通用视图。您要完成什么?

    【讨论】:

    • 我想你误解了我的问题。我正在尝试学习如何使用 Django 的基于通用类的视图。像默认视图。没有我要声明的表格。我创建一个视图为
    • ... class MyView(DetailView) 用模型实例化它并用 MyView.as_view() 渲染它。我的模板接收模型实例作为对象。当我没有 A 表格时,如何将它与脆皮表格结合起来?
    • DetailView 是一个显示视图。你不应该使用表格。但我会更新一种将它传递给模板的方法
    • 本质上,在我实现更多模型以及更多 admins formsviews 之前,我正在尝试学习最好的 DRY 方法来做事看起来非常相似的代码,如果我更改所有代码的内容,则需要进行大量编辑。我想了解所有泛型,看看我是否可以使用它们或创建自己的版本。但我也使用crispy-forms 来设置 HTML 样式,我不想放弃它。我希望让 {% crispy %} 使用视图或获取表示 CBV 内容的表单以使用 {% crispy form %}
    • 也许无法使用crispy-forms 并获得通用CBVs 的全部好处
    猜你喜欢
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    • 2016-01-29
    • 1970-01-01
    相关资源
    最近更新 更多