Django:基于类的视图无法呈现清晰的表单

Posted

技术标签:

【中文标题】Django:基于类的视图无法呈现清晰的表单【英文标题】:Django: Class based view can't render crispy form 【发布时间】:2012-08-16 15:42:30 【问题描述】:

你好 *** 的人,

我无法使用基于类的视图呈现清晰的表单。当我使用基于函数的视图时,一切正常。

像往常一样,我生成 forms.py 如下:

from django import forms    
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Div, Submit, html, Button, Row, Field
from item.models import Item

class CreateItemForm(forms.ModelForm):
    class Meta:
        model = Item
        exclude = ('user',)

        def __init__(self, *args, **kwargs):
            self.helper = FormHelper()
            self.helper.form_tag = False
            self.helper.form_class = 'form-horizontal'
            self.helper.layout = Layout(
                Fieldset(
                    'Create your item here',
                    'name', 'description', 
                    'save',
                ),
            )
            self.request = kwargs.pop('request', None)
            return super(CreateItemForm, self).__init__(*args, **kwargs)

视图函数非常简单标准:

from django.views.generic.edit import CreateView,
from item.models import Item
from item.forms import CreateItemForm

class ItemCreate(CreateView):
    form_class = CreateItemForm
    model = Item
    template_name = 'item/item_create_form.html' 

模板也遵循最少的说明:

% extends "base.html" %
% load crispy_forms_tags %
% block content %
<h2>Create new Item</h2>
            <form action="." class="crispy form-horizontal" method="post">
                % crispy form form.helper %
            </form>
% endblock %

我的问题是 Django 会抱怨“VariableDoesNotExist at /item/add/, Failed lookup for key [helper] in ...”。

清晰的表单是否与基于类的视图兼容?我怎样才能交出帮助信息以正确创建表单?

感谢您的帮助和建议。

【问题讨论】:

能否提供更多的traceback数据? Django - Have a class based view and Crispy form parrallell to each other on same page的可能重复 嗨 Nihal,看起来另一篇文章较新(只有 15 天)。这是 8 个月前发布的。 【参考方案1】:

我留下了什么让我失望

形式|酥脆

而不是使用

% 酥脆形式 %

前者只会发出 Django 的基于通用类的视图

【讨论】:

【参考方案2】:

使用它而不是显示排除

fields ('field1','field2','field3')

这里将 field1 和 field2 和 field3 替换为您的字段名称。你想展示的。这对我有用。

【讨论】:

【参考方案3】:

你的表单中的构造函数太缩进了,这样就属于表单的Meta类,但应该直接在CreateItemForm

【讨论】:

感谢您的回答。是的,缩进是个问题。但现在呈现完整的表单,而不仅仅是选定的字段(名称、描述)。如何强制清晰的表单专注于 Fieldset 中的字段? 这是另一个问题,但请尝试从表单的 Meta 类中删除 exclude 感谢您的建议,但没有奏效。仍然显示完整的表格。作为一个快速的解决方案,我在 Meta 下声明了 fields = ...,但是这样,我无法修改表单字段的外观。感谢您的帮助!

以上是关于Django:基于类的视图无法呈现清晰的表单的主要内容,如果未能解决你的问题,请参考以下文章

Django 基于类的视图:覆盖表单名称

基于 Django 类的视图加载另一个带有数据的表单

Django 基于类的视图是不是自动为模板分配表单值

Django 在基于类的视图中处理多个表单

基于 Django 类的视图:发布表单数据返回 302 Found 状态码

将 html 表单数据获取到基于 django 类的视图中