嗨Stackoverflow人,
我无法使用基于类的视图呈现清晰的表单。当我使用基于函数的视图时,一切正常。
像往常一样,我生成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会在/ item / add /中抱怨“VariableDoesNotExist,在...中找不到关键[helper]的错误”。
脆弱的表单是否与基于类的视图兼容?我如何交出帮助信息以正确创建表单?
感谢您的帮助和建议。
答案 0 :(得分:7)
构造函数太过缩进,这样它就属于表单的Meta
类,但它应该直接在CreateItemForm
答案 1 :(得分:0)
使用此代替显示排除
fields ('field1','field2','field3')
此处将field1和field2以及field3替换为您的字段名称。你想表现出来。这对我有用。
答案 2 :(得分:0)
我离开的是什么?
{{form | crispy}}
而不是使用
%crispy form%}
前者只会发出Django基于通用类的视图